我是oracle新手。问题是存在一个具有以下参数的现有过程
P_ENTT IN PURCHASEORDER.POCODE%TYPE,
P_LOCCODE IN LOCATION.LOCATIONCODE%TYPE,
P_PROCESSID IN VARCHAR,
V_TAXREF OUT SYS_REFCURSOR
我正在编写一个新过程,该过程将遍历上述过程返回的记录。我曾尝试使用如下的Loop关键字
FOR rec IN (OLDProcedure(Old_params))
LOOP
-- some calculations
END LOOP;
但是无法实现相同的功能。在这种情况下,如何在存储过程中循环遍历返回的记录。
答案 0 :(得分:2)
根据下面显示的Anonymous
块重写您的过程。请阅读内联的注释以理解。
DECLARE
--Variable of type of your procedure `OUT` paramater
var sys_refcursor;
--Columns selected in your sys_refcursor query
var1 NUMBER;
var2 NUMBER;
var3 NUMBER;
BEGIN
--call your existing procedure in new procedure
myProc( P_ENTT =>1, V_TAXREF => var); --Pass other parameters as well
--Loop to get your records
LOOP
--Fetch records of your sys_refcursor to variables
FETCH var INTO var1,var2,var3;
EXIT WHEN var%notfound;
--Display your records
dbms_output.put_line(var1);
END LOOP;
END;
答案 1 :(得分:1)
正如@XING在上面的答案中所暗示的,我将明确指出,您不能将带有游标变量的游标用于循环。因此,您打开了游标变量,然后使用带有显式访存,退出时和关闭语句的简单循环。
但是您可能会问:@XING为什么不关闭光标?由于是在本地声明的,因此当块终止时,PL / SQL引擎将自动关闭游标变量。
感谢PL / SQL!