2008-11-28 82 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

回答