如何创建可存储在Oracle数据库中的参照游标类型

8nuwlpux  于 2023-03-29  发布在  Oracle
关注(0)|答案(2)|浏览(133)

我想在数据库中创建一个引用游标类型,这样我就可以在SQL开发人员命令窗口中使用以下语句声明此类型的变量:

variable PO_Ref_Csr_Out RefCursorTyp;

在声明中,RefCursorTyp是数据库中存储的ref游标类型
我想在匿名pl/sql块中使用这个PO_Ref_Csr_Out变量来测试一些过程。
如何在数据库中创建此RefCursorTyp?
我不知道如何在数据库中创建类型。

iswrvxsc

iswrvxsc1#

如果你想知道如何创建一个强类型的游标,那么创建一个包并在其中定义类型:

CREATE PACKAGE SCHEMA_NAME.PACKAGE_NAME
AS
  TYPE RefCursorTyp IS REF CURSOR
    RETURN SCHEMA_NAME.TABLE_NAME%ROWTYPE;

  PROCEDURE get_Strongly_Typed_Cursor (
    out_cursor OUT RefCursorTyp
  );
END;
/

CREATE PACKAGE BODY SCHEMA_NAME.PACKAGE_NAME
AS
  PROCEDURE get_Strongly_Typed_Cursor (
    out_cursor OUT RefCursorTyp
  )
  IS
  BEGIN
    OPEN out_cursor FOR
     SELECT * FROM SCHEMA_NAME.TABLE_NAME;
  END;
END;
/

如果你想在PL/SQL中使用它,你可以:

DECLARE
  v_cur SCHEMA_NAME.PACKAGE_NAME.RefCursorTyp;
BEGIN
  SCHEMA_NAME.PACKAGE_NAME.get_Strongly_Typed_Cursor(v_cur);
  -- Do something with the cursor.
END;
/

fiddle

gmxoilav

gmxoilav2#

对我来说,这是做你所描述的事情的最简单的方法。
Oracle的命令行工具SQL*Plus

SQL> var rc refcursor
SQL>
SQL> begin
  2    open :rc for
  3      select * from dept;
  4  end;
  5  /

PL/SQL procedure successfully completed.

SQL> print rc

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL>

或者,使用Oracle的(免费)SQL DeveloperGUI工具(代码类似于前面的代码,但它不适用于匿名PL/SQL块,而是使用返回refcursor的存储过程):

相关问题