2008-11-28 70 views
1

我有一个关于从弱类型游标获取结果的快速问题,并且想知道是否有人以前遇到过这个问题?PL/SQL:从两个函数之间传递的游标获取

我的设置如下;

内功能;

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

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

有没有人有任何想法可能在这里的问题?我已经搜索了它,所有我能找到的建议强烈键入游标,这不是我不幸的选择。

感谢任何人的帮助,欢呼声。

+0

尝试将`OUT`参数更改为`IN OUT`,看看是否照顾它。 – 2014-10-18 03:22:47

回答