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

Posted

技术标签:

【中文标题】PL/SQL:从两个函数之间传递的游标中获取【英文标题】:PL/SQL: Fetching from a Cursor that is passed between two functions 【发布时间】:2008-11-28 11:06:28 【问题描述】:

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

我的设置如下;

内部函数;

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:返回类型 结果集变量或查询不 匹配

我不确定是什么导致了这种情况发生。该错误发生在我的测试代码中,但我之前已经使用了数百次完全相同的方法并且没有遇到这个问题。现在唯一的区别是,光标是通过两个函数而不是一个函数传回的。

有谁知道这里可能存在什么问题?我已经在 Google 上搜索过了,我能找到的只是强烈键入光标的建议,不幸的是,这对我来说不是一个选项。

感谢任何人提供的任何帮助,干杯。

【问题讨论】:

尝试将 OUT 参数更改为 IN OUT 看看是否可以解决问题。 【参考方案1】:

我可以复制您的问题,这对我来说似乎是一个 Oracle 错误。通过谷歌搜索我发现this discussion of the same problem on OraFAQ的错误。

【讨论】:

以上是关于PL/SQL:从两个函数之间传递的游标中获取的主要内容,如果未能解决你的问题,请参考以下文章

从 PL/SQL 游标中获取所有结果的任何简单方法?

PL/SQL - 动态访问光标数据

PL/SQL:游标使用中的 ORA-01001

Oracle PL SQL:比较两个存储过程返回的引用游标结果

Oracle Pl/sql 从多个查询中返回一个游标

PL/SQL 编程游标存储过程函数