如何从 Oracle PL/SQL 的另一个 SP 中的游标 return 获取信息?

How to get info from cursor return in another SP in Oracle PL/SQL?

我想从另一个 SP 调用一个 SP return 一个游标 'n' 次,并使用游标读取其信息。

我在 Oracle PL SQL 中有一个 SP 的以下代码:

create or replace procedure USP_FALTAN_REPORTE(cur_OUT out REF CURSOR) as
  vFaltantes_SP1      REF CURSOR
  vNumProyeto         NUMBER;
  vTemporalTable      NUMBER;
BEGIN
  DECLARE
    CURSOR proyectos is
      SELECT DISTINCT PROYECTO FROM TB_PROYECTOS;
  BEGIN
    FOR c1 in proyectos loop
      dbms_output.put_line('# proyecto: ' || c1.proyecto);
      vNumProyeto := c1.proyecto;       
      USP_FALTANTES(vNumProyeto , vFaltantes_SP1);
   end loop;
  end;
end;

我的问题是如何从 SP USP_FALTANTES 的 return 游标 vFaltantes_SP1 获取信息?

当我对 USP_FALTANTES 这个 return 类型的游标进行测试时也是 ref 游标。

我试过类似的东西:

BEGIN
   OPEN vFaltantes_SP1; 
      LOOP
       FETCH vFaltantes_SP1 BULK COLLECT
         INTO vTemporalTable;
        CLOSE vFaltantes_SP1;            
          dbms_output.put_line(vTemporalTable.First);
      END LOOP;
END;

但 Oracle 显示此错误:

PLS-00382: expression is of wrong type

错误标记在OPEN中vFaltantes_SP1;

谁能帮帮我。

谢谢:)

您应该删除打开的光标行,试试这个:

BEGIN
      LOOP
       FETCH vFaltantes_SP1 BULK COLLECT
         INTO vTemporalTable limit 1000;
      END LOOP;
        CLOSE vFaltantes_SP1;            
      for n in vTemporalTable.first .. vTemporalTable.last loop
             dbms_output.put_line(vTemporalTable(n));
      end loop;
END;