Oracle 在另一个过程中使用sys_refcursor作为out参数调用SP

Oracle 在另一个过程中使用sys_refcursor作为out参数调用SP,oracle,stored-procedures,plsql,sys-refcursor,Oracle,Stored Procedures,Plsql,Sys Refcursor,我有一个SP create or replace PROCEDURE ALTERNATE_NAME_LOOKUP ( P_NAME IN VARCHAR2, P_TYPE IN VARCHAR2, retCursor OUT SYS_REFCURSOR ) 我没有粘贴它身体的其他部分;上述程序本身运行良好(当然与正文一起) 现在我想从另一个存储过程调用它,并遍历refcursor 我所做的是声明一个\u last\u cur SYS\u REFCURSOR并调用备用名称

我有一个SP

create or replace PROCEDURE         ALTERNATE_NAME_LOOKUP
 ( P_NAME IN VARCHAR2,
  P_TYPE IN VARCHAR2, retCursor OUT SYS_REFCURSOR
 )
我没有粘贴它身体的其他部分;上述程序本身运行良好(当然与正文一起)

现在我想从另一个存储过程调用它,并遍历refcursor

我所做的是声明
一个\u last\u cur SYS\u REFCURSOR并调用备用名称查找过程作为
备用名称查找(p_req.LASTNAMEEXP,c_LAST,an_LAST_cur)它编译。
但当我添加下面的块时-

 ALTERNATE_NAME_LOOKUP('Roman Reigns','LAST',an_last_cur);
      For alt in an_last_cur
      Loop
        DBMS_OUTPUT.PUT_LINE('ok');
      end loop;
它给出了编译错误-

 PLS-00221: 'AN_LAST_CUR' is not a procedure or is undefined
我做错了什么

create or replace procedure alternate_name_lookup
 ( p_name in varchar2, p_type in varchar2, retcursor out sys_refcursor ) 
as
begin
  open retcursor for select * from user_objects ;     
end;

set serveroutput on
declare
  an_last_cur sys_refcursor;
  type my_objects is table of user_objects%rowtype;
  objects my_objects;
begin
  alternate_name_lookup('Roman Reigns','LAST',an_last_cur);

  fetch an_last_cur bulk collect into objects;
  dbms_output.put_line(objects.count);

  for indx in 1 .. objects.count 
  loop
    dbms_output.put_line(objects(indx).object_name);
  end loop;  

  close an_last_cur;
end;
试试这个。希望这有帮助。我没有工作空间,所以请原谅 语法错误(如果有)

创建或替换程序测试\u参考\u prc
(p_ref_out sys_refcursor)
作为
开始
打开p_ref_out以查看
按级别<10从双连接中选择级别;
结束;
创建或替换程序测试\u参考2
作为
参考系统参考光标;
编号;
开始
试验参考中国(参考C);
获取refc批量收集到num\u ntt中;
对于num\u ntt.FIRST..num\u ntt.LAST循环中的I
dbms_output.put_行(num_ntt(i));
端环;
结束;
执行测试参考2;
试试这个。希望这有帮助。我没有工作空间,所以请原谅 语法erro r(如果有)

创建或替换程序测试\u参考\u prc
(p_ref_out sys_refcursor)
作为
开始
打开p_ref_out以查看
按级别<10从双连接中选择级别;
结束;
创建或替换程序测试\u参考2
作为
参考系统参考光标;
编号;
开始
试验参考中国(参考C);
获取refc批量收集到num\u ntt中;
对于num\u ntt.FIRST..num\u ntt.LAST循环中的I
dbms_output.put_行(num_ntt(i));
端环;
结束;
执行测试参考2;

当我将sp称为
备用名称查找('Roman Remings'、'LAST'、:an_LAST\u cur)
它给出了
PLS-00049:坏绑定变量'AN\u LAST\u CUR'
Refcursors不是这种情况下应该寻找的解决方案。使用集合,然后根据需要传递它。当我调用sp作为
ALTERNATE_NAME_LOOKUP('Roman Remings','LAST',:an_LAST_cur)时
它给出了
PLS-00049:坏绑定变量'AN\u LAST\u CUR'
Refcursors不是这种情况下应该寻找的解决方案。使用集合,然后根据需要传递它。我正在尝试在当前过程中打开sys\u refcursor(备用名称\u LOOKUP的输出)立即重新检查。希望此帮助我正在尝试打开当前过程中的sys_refcursor(备用名称查找的输出)现在重新检查。希望这有帮助
CREATE OR REPLACE PROCEDURE test_ref_prc
  ( p_ref_out  OUT sys_refcursor)
AS
BEGIN
OPEN p_ref_out FOR
  SELECT LEVEL  FROM DUAL CONNECT BY LEVEL < 10;
END;

CREATE OR REPLACE PROCEDURE test_ref2
AS
refc sys_refcursor;
num_ntt NUMBER_NTT;
BEGIN
test_ref_prc(refc);
FETCH refc BULK COLLECT INTO num_ntt;
FOR I IN num_ntt.FIRST..num_ntt.LAST LOOP
dbms_output.put_line(num_ntt(i));
END LOOP;
END;

exec test_ref2;