首页 > 解决方案 > ORACLE 使用游标类型调用包内的存储过程

问题描述

我真的很难在下面调用存储过程。我正在使用 oracle sql developer,版本 19.2。我尝试过的是这个答案,但我收到了错误(与评论中描述的错误相同)。为什么从sql developer调用这么简单的存储过程这么难?

create or replace PACKAGE BODY "PCK_FIRST" IS
      PROCEDURE GET_GETNAMES(
        USER_ID IN NUMBER,    
        M_RESULT OUT TYPES.CURSOR_TYPE
      ) IS
      BEGIN
        OPEN M_RESULT FOR
        SELECT * FROM PER_NAMES WHERE ID = USER_ID;
      END;

END PCK_FIRST;

标签: oracleplsql

解决方案


首先,我建议您运行此程序,然后再次尝试执行您的程序

create or replace package types as
   type cursor_type is ref cursor;
end
/

否则试试这个改变TYPES.CURSOR_TYPE with sys_refcursor

--example
create table test_user (
   user_id number(19) not null,
   username varchar2(50)
);

insert into test_user values (1, 'user1');

insert into test_user values (2, 'user2');

create or replace procedure test_proc (
   p_user_id in number,
   p_out_rec out sys_refcursor
)
is
   l_out SYS_REFCURSOR;
begin
   open l_out for
      select * 
        from test_user
       where user_id = p_user_id;
end;
/

declare
   l_output sys_refcursor;
   l_userid number := 1;
begin
  test_proc(1, l_output);
end;

PL/SQL procedure successfully completed.

推荐阅读