弱く型付けされたカーソルから結果をフェッチすることについて簡単な質問がありますが、以前にこの問題に遭遇したことがあるかどうか疑問に思っていましたか?
私のセットアップは次のとおりです。
内部機能;
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: 結果セット変数または問合せの戻り型が一致しません
何が原因でこれが発生するのか、私にはよくわかりません。私のテストコードでエラーが発生していますが、これとまったく同じ方法を何百回も使用しており、この問題は発生していません。唯一の違いは、カーソルが 1 つではなく 2 つの関数を介して戻されることです。
ここで何が問題なのか、誰にも分かりますか?私はそれについてグーグルで検索しましたが、見つけることができるのは、カーソルを強く入力するための提案だけです。残念ながら、これはオプションではありません。
誰でもできる助けに感謝します、乾杯。