Oracle将PL / SQL表转换为SYS_REFCURSOR

时间:2016-01-25 16:23:58

标签: oracle stored-procedures plsql

我正在尝试从java代码访问我的Stored Procedure,其中该过程正在退回PL/SQL table(PACKAGE TABLE) type,因为在我的java代码中很容易处理SYS_REFCURSOR,我正在尝试转换我的存储过程中的PL/SQL table to SYS_REFCURSOR。谷歌搜索后,我没有得到任何适当的答案。有人可以帮我解决这个转换逻辑吗?

create or replace PROCEDURE     TESTPROC(
  INPUT1 IN VARCHAR2,
  INPUT2 IN VARCHAR2,
  P_PRC OUT SYS_REFCURSOR) AS 
  PACKAGE_TABLE PACKAGE.TESTTABLE;
BEGIN
  PACKAGE_TABLE := FUNCTION_RETURN_PACKAGE_TABLE(INPUT1, INPUT2);
  -- **LOGIC TO CONVERT PACAKGE_TABLE TO SYS_REFCURSOR GOES HERE**
END TESTPROC;

1 个答案:

答案 0 :(得分:1)

您可以使用TABLE运算符

create or replace PROCEDURE     TESTPROC(
  INPUT1 IN VARCHAR2,
  INPUT2 IN VARCHAR2,
  P_PRC OUT SYS_REFCURSOR) AS 
BEGIN
    OPEN P_PRC FOR
        SELECT * FROM TABLE(FUNCTION_RETURN_PACKAGE_TABLE(INPUT1, INPUT2));
END TESTPROC;

但是你应该记住,你必须拥有架构级pl \ sql表类型(对于oracle< 12c)。另请注意,SELECT * FROM为您带来了一个带有-plsql-table-row-type值的单行。