Oracle PL/SQL:从两个函数之间传递的游标获取

Oracle PL/SQL:从两个函数之间传递的游标获取,oracle,plsql,cursors,Oracle,Plsql,Cursors,我有一个关于从弱类型游标获取结果的快速问题,我想知道以前是否有人遇到过这个问题 我的设置如下 内在功能 create or replace FUNCTION A_CURSOR_TEST_INNER ( varCursor OUT SYS_REFCURSOR ) RETURN NUMBER AS varStatus NUMBER; BEGIN OPEN varCursor FOR SELECT docid FROM DOCUMENT_TABLE; RETURN 0; E

我有一个关于从弱类型游标获取结果的快速问题,我想知道以前是否有人遇到过这个问题

我的设置如下

内在功能

create or replace FUNCTION A_CURSOR_TEST_INNER
(
  varCursor OUT SYS_REFCURSOR
)
RETURN NUMBER
AS
  varStatus NUMBER;
BEGIN
  OPEN varCursor  FOR
  SELECT docid
  FROM DOCUMENT_TABLE;

  RETURN 0;
END;
create or replace FUNCTION A_CURSOR_TEST_OUTER
(
  varCursor  OUT SYS_REFCURSOR
)
RETURN NUMBER
AS
  varStatus NUMBER;
BEGIN
  varStatus := A_CURSOR_TEST_INNER(varCursor  => varCursor);
  RETURN 0;
END;
调用函数

create or replace FUNCTION A_CURSOR_TEST_INNER
(
  varCursor OUT SYS_REFCURSOR
)
RETURN NUMBER
AS
  varStatus NUMBER;
BEGIN
  OPEN varCursor  FOR
  SELECT docid
  FROM DOCUMENT_TABLE;

  RETURN 0;
END;
create or replace FUNCTION A_CURSOR_TEST_OUTER
(
  varCursor  OUT SYS_REFCURSOR
)
RETURN NUMBER
AS
  varStatus NUMBER;
BEGIN
  varStatus := A_CURSOR_TEST_INNER(varCursor  => varCursor);
  RETURN 0;
END;
测试线束代码

DECLARE
  varCursor  SYS_REFCURSOR;
  v_Return NUMBER;
BEGIN
  v_Return := A_CURSOR_TEST_OUTER(varCursor  => varCursor);
    DECLARE
        docid_ NUMBER;
    BEGIN
        IF(varCursor %ISOPEN) THEN
            LOOP
                FETCH varCursor  INTO docid_ ;
                EXIT WHEN varCursor %NOTFOUND;
                DBMS_OUTPUT.PUT_LINE(' docid_:' || docid_ );
            END LOOP;
            CLOSE varCursor ;
        END IF;
    END;
END;
如果我运行测试线束代码,我得到的错误是

ORA-06504:PL/SQL: 结果集变量或查询不可用 匹配

我真的不确定是什么导致了这种情况的发生。错误发生在我的测试代码中,但我以前使用过几百次完全相同的方法,没有遇到这个问题。现在唯一的区别是,游标通过两个函数而不是一个函数向上传递

有人知道这里可能有什么问题吗?我已经在谷歌上搜索过了,我能找到的只是关于强输入光标的建议,不幸的是,这对我来说不是一个选项


谢谢任何人能给予的帮助,干杯。

我可以复制你的问题,对我来说这似乎是一个甲骨文错误。通过谷歌搜索我发现的错误。

尝试将
OUT
参数更改为
IN-OUT
,看看这是否解决了问题。