我们的应用程序将信息从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;
不起作用.
我不能在这里测试它(没有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.