Oracle - 如何在存储过程中使用out ref cursor参数?

Geo*_*uer 1 oracle scoping

我们的应用程序将信息从oracle存储过程传递到oracle .net提供程序的标准方法是通过out ref cursor参数.

在过去,我们所有的存储过程都在包中,并且具有以下内容:

CREATE OR REPLACE PACKAGE test_package IS
   TYPE refcur IS REF CURSOR;
   PROCEDURE get_info ( o_cursor            OUT      refcur );
END test_package;
/
CREATE OR REPLACE PACKAGE BODY test_package IS
   PROCEDURE get_info ( o_cursor            OUT      refcur ) AS
   BEGIN
     OPEN o_cursor FOR
       SELECT * FROM v$database;
   END get_info;
END test_package;
/
Run Code Online (Sandbox Code Playgroud)

现在我想将get_info过程从包中移出并进入常规过程,但不知道如何获取refcur类型.如何在包范围外创建它?

创建或替换类型refcur是REF CURSOR;

不起作用.

tui*_*oel 8

我不能在这里测试它(没有Oracle),但你可以这样做:

create or replace procedure get_info(p_cursor out sys_refcursor)
is
begin
  open p_cursor for
    select *
    from   v$database; 
end;
/
Run Code Online (Sandbox Code Playgroud)

在Oracle 9及更高版本中,不再需要声明TYPE result_crsr IS REF CURSOR

请改用sys_refcursor.