1

弱く型付けされたカーソルから結果をフェッチすることについて簡単な質問がありますが、以前にこの問題に遭遇したことがあるかどうか疑問に思っていましたか?

私のセットアップは次のとおりです。

内部機能;

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 つの関数を介して戻されることです。

ここで何が問題なのか、誰にも分かりますか?私はそれについてグーグルで検索しましたが、見つけることができるのは、カーソルを強く入力するための提案だけです。残念ながら、これはオプションではありません。

誰でもできる助けに感謝します、乾杯。

4

1 に答える 1

2

私はあなたの問題を再現できます。私には Oracle のバグのように思えます。エラーをグーグルで検索すると、 OraFAQ で同じ問題に関するこの議論が見つかりました。

于 2008-11-28T12:18:10.283 に答える