我有一个相当复杂的光标位于存储过程中,我将需要在不同的过程中。在此过程中复制和粘贴光标是不好的做法吗?我可以把那个光标称为这样吗?
OPEN diffProcedure.cursorName(params)...
LOOP
FETCH ....
INTO ....
EXIT WHEN ....
END LOOP;
光标可能是200行复杂的代码,我对(Junior Dev
处理复杂的业务PL / SQL代码)没有很好的理解,但我知道它的作用。使用我需要的参数调用它将获得所需的正确数据。
将光标从一个过程复制到另一个过程是不是一个坏主意?我可以从不同的程序调用光标吗?
答案 0 :(得分:1)
您不能从另一个过程引用过程中声明的游标
但是,当您在包中声明游标时,可以从位于同一包中的其他过程,其他包中,甚至从独立过程中调用它。
简单的例子:
CREATE OR REPLACE PACKAGE somepackage IS
CURSOR my_cursor( par IN NUMBER ) IS
SELECT par FROM dual;
END;
/
CREATE OR REPLACE PACKAGE someotherpackage IS
PROCEDURE MY_Procedure;
END;
/
CREATE OR REPLACE PACKAGE BODY someotherpackage IS
PROCEDURE MY_Procedure IS
x NUMBER;
BEGIN
OPEN somepackage.my_cursor( 2 );
FETCH somepackage.my_cursor INTO x;
CLOSE somepackage.my_cursor;
DBMS_OUTPUT.PUT_LINE( x );
END;
END;
/
create or replace procedure some_standalone_procedure IS
y NUMBER;
BEGIN
OPEN somepackage.my_cursor( 5 );
FETCH somepackage.my_cursor INTO y;
CLOSE somepackage.my_cursor;
DBMS_OUTPUT.PUT_LINE( y );
END;
/
现在开火测试:
exec someotherpackage.MY_Procedure;
2
exec some_standalone_procedure;
5