0

我想在循环结束时选择结果值。我正在简化原始问题的代码。状态可能是 1 或 0。这个循环是检查我的 SELECT UNIQUE 查询的结果中是否有任何“1”。如果“是”,那么我的函数的结果必须始终为 1(或 TRUE)。

DECLARE 
    CURSOR status_cursor is(SELECT UNIQUE status
                            FROM    src_table st, bucket_table bt, many_table mt
                            WHERE   st.id = bt.st_id
                            AND    bt.mt_id = mt.id);
    result BOOLEAN := FALSE;
BEGIN
    FOR vals IN status_cursor
    LOOP
        IF vals.status = 1 THEN result := TRUE;
        END IF;
    END LOOP;
    SELECT result FROM DUAL; <-- this line does not work see error msg. 
END;

我收到此错误消息:

ORA-06550: line 20, column 9:
PLS-00382: expression is of wrong type
ORA-06550: line 20, column 2:
PLS-00428: an INTO clause is expected in this SELECT statement
4

2 回答 2

2

请参阅此链接

“...您不能将 BOOLEAN 值传递给 DBMS_OUTPUT.PUT 或 DBMS_OUTPUT.PUTLINE 子程序。要打印 BOOLEAN 值,请使用 IF 或 CASE 语句将其转换为字符值...

由于 SQL 没有与 BOOLEAN 等效的数据类型,因此您不能:

  • 将 BOOLEAN 值分配给数据库表列
  • 选择或获取数据库表列的值到 BOOLEAN 变量中
  • 在 SQL 语句、SQL 函数或从 SQL 语句调用的 PL/SQL 函数中使用 BOOLEAN 值

……”

我不明白这个过程,但也许这会有用,在这种情况下,你不应该使用CURSOR

SELECT UNIQUE COUNT(status) INTO result
FROM    src_table st, bucket_table bt, many_table mt
WHERE   st.id = bt.st_id AND    bt.mt_id = mt.id
AND status = 1

/*
    IF result > 0 
    THEN 'true'
    ELSE 'false'
*/
于 2013-06-26T17:55:55.357 回答
0

你可以使用:

dbms_output.put_line(CASE result WHEN TRUE THEN 'TRUE' WHEN FALSE THEN 'FALSE' END);
于 2013-06-26T19:26:50.797 回答