循环从具有许多表的过程返回的游标

trp*_*him 1 sql oracle stored-procedures

我正在使用一个我没有编写的存储过程,它很长并且包含许多列和连接.该过程返回一个游标,应用程序服务器(.NET,顺便提一下)接收并迭代.

我正在尝试使用SQLPlus和PL/SQL拦截游标,但我很难弄清楚如何设置脚本.这是我到目前为止所拥有的:

DECLARE
    cur sys_refcursor;
BEGIN
  adv_schema.report_proc('CAL','01-JAN-2011','01-JAN-2012','Y',cur);
  OPEN cur FOR --??????
  LOOP
    FETCH cur INTO column1, column2;
    EXIT WHEN cur%NOTFOUND;
    DBMS_OUTPUT.Put_Line ('First Name: '||column1||' Last Name: '||column2);
  END LOOP;
END;

/
Run Code Online (Sandbox Code Playgroud)

我在OPEN声明中加入了什么?我所见过的关于如何执行此操作的所有示例都是过于简化的示例,其中在PL/SQL块中创建了一些表't',然后打开了一个带有查询到该表的游标,以进行循环.过程何时将游标返回到具有多个表的复杂查询?

Jus*_*ave 5

假设该report_proc过程正在返回游标(即第四个参数定义为a OUT SYS_REFCURSOR),则OPEN代码中不需要游标.该程序已经打开它.你只需要从它获取.