PL/SQL - 如何创建一个条件游标?
问题描述:
我需要有一个条件光标,如:PL/SQL - 如何创建一个条件游标?
- 如果行存在(使用WHEN EXISTS或像这样),那么我的光标:
- CURSOR varCursor的是选择1 FROM DUAL;
- 否则
- CURSOR varCursor IS SELECT 2 FROM DUAL;
但是你看,我并不想改变列结果,我想改变整个光标。
贝娄我举了一个更大的例子。
谢谢!
参见:
SET serveroutput ON SIZE 900000;
DECLARE
CURSOR varCursor IS SELECT 1 a FROM DUAL;
-- CURSOR varCursor IS SELECT 2 a FROM DUAL;
BEGIN
FOR varRow IN varCursor LOOP
dbms_output.put_line('row: ' || varRow.a);
END LOOP;
dbms_output.put_line('Done.');
END;
答
禁止把它变成一个查询(托尼建议),因为你想要一个游标结果,你可以做这样(这将光标切换到您需要的逻辑 - >一个光标溶液)
DECLARE
PROCEDURE CURSORCHOICE(ITEM IN NUMBER) IS
L_REFCUR SYS_REFCURSOR;
returnNum number;
BEGIN
IF NVL(ITEM,0) > 0 THEN
OPEN L_REFCUR FOR
SELECT ITEM * level FROM DUAL
CONNECT BY LEVEL < ITEM ;
ELSE
OPEN L_REFCUR FOR
SELECT ITEM - LEVEL FROM DUAL
connect by level < -1 * ITEM ;
END IF;
dbms_output.put_line('Results to item ' || item);
loop
fetch l_refcur into returnNum;
exit when l_refcur%notfound;
dbms_output.put_line(returnNum);
end loop;
CLOSE L_REFCUR;
END ;
BEGIN
CURSORCHOICE(5);
CURSORCHOICE(-5);
end ;
/
Results to item 5
5
10
15
20
Results to item -5
-6
-7
-8
-9
答
从字面上看,你可以这样做:
CURSOR varCursor IS SELECT 1 a FROM DUAL WHERE EXISTS (...)
UNION
SELECT 2 a FROM DUAL WHERE NOT EXISTS (...);
但是,它会更简单,也许更有效的有2个游标和开放适当的指令。