如何从 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;
我想从另一个 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;