SQL-在游标循环中选择一个值
我想在循环结束时选择结果值。我正在简化原始问题的代码。状态可能为1或0。此循环用于检查我的SELECT UNIQUE查询结果中是否存在任何“1”。如果“是”,则函数的结果必须始终为1(或TRUE)SQL-在游标循环中选择一个值,sql,oracle,loops,Sql,Oracle,Loops,我想在循环结束时选择结果值。我正在简化原始问题的代码。状态可能为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
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;
请看这个
“…无法将布尔值传递给DBMS_OUTPUT.PUT或DBMS_OUTPUT.PUTLINE子程序。若要打印布尔值,请使用IF或CASE语句将其转换为字符值
因为SQL没有与布尔值等效的数据类型,所以不能:
- 为数据库表列指定布尔值
- 选择或获取数据库表列的值到布尔变量中
- 在SQL语句、SQL函数或从SQL语句调用的PL/SQL函数中使用布尔值
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'
*/
您可以使用:
dbms_output.put_line(CASE result WHEN TRUE THEN 'TRUE' WHEN FALSE THEN 'FALSE' END);
您希望最后一个select做什么?结果应该去哪里?这是在一个过程中,一个函数,还是在其他地方?这最终会成为一个函数。但同时,我需要将其作为一个简单的查询(过程)进行测试。我希望最后一次选择是我查询的结果。如果它是一个函数,那么您需要返回的是,而不是一个不会去任何地方的奇怪选择。如果不是,你需要选择一些东西——但是从dual中选择一个你已经知道的值是没有意义的——这只是一个昂贵的禁止操作。太棒了!那么,作为一个程序,我的解决方案是什么?我会努力使它作为一个函数工作。但如果没有函数,是否有可能得到“result”的值?“选择某样东西”,它是如何工作的?你所说的“得到结果”是什么意思?你已经有了。如果要将其返回到某个对象,则需要一个函数。如果您想显示它,可以使用dbms_输出。您可能会丢失UNIQUE并添加一个“and rownum”
dbms_output.put_line(CASE result WHEN TRUE THEN 'TRUE' WHEN FALSE THEN 'FALSE' END);