我想在循环结束时选择结果值。我正在简化原始问题的代码。状态可以是1 ou 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
答案 0 :(得分:2)
请参阅此LINK。
“...您无法将BOOLEAN值传递给DBMS_OUTPUT.PUT或DBMS_OUTPUT.PUTLINE子程序。要打印BOOLEAN值,请使用IF或CASE语句将其转换为字符值...
因为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'
*/
答案 1 :(得分:0)
您可以使用:
dbms_output.put_line(CASE result WHEN TRUE THEN 'TRUE' WHEN FALSE THEN 'FALSE' END);