0

どこが間違っていますか?

仕様:

CREATE OR REPLACE PACKAGE CTI_MATRIX.AMD AS
  TYPE REF_CURSOR IS REF CURSOR;
  PROCEDURE AMD_NEEDMSG (v_CRN IN VARCHAR2, return_recordset OUT REF_CURSOR);
END AMD;

体:

CREATE OR REPLACE PACKAGE BODY CTI_MATRIX.AMD AS
PROCEDURE AMD_NEEDMSG (v_CRN IN VARCHAR2, return_recordset OUT REF_CURSOR)
IS
BEGIN
    -- 
END AMD_NEEDMSG;
END AMD;

TOAD からの失敗したブロック:

DECLARE 
RETURN_RECORDSET AMD.REF_CURSOR;
BEGIN 
    RETURN_RECORDSET := NULL;
    CTI_MATRIX.AMD.AMD_NEEDMSG ( '123456789', RETURN_RECORDSET );
END;

エラー: PLS-00382 式のタイプが間違っています 5 行目

4

2 に答える 2

0

あなたは誰としてログオンしていますか?

なので:

DECLARE 
RETURN_RECORDSET AMD.REF_CURSOR;
BEGIN 
    RETURN_RECORDSET := NULL;
    CTI_MATRIX.AMD.AMD_NEEDMSG ( '123456789', RETURN_RECORDSET );
END;

は正しい構文ですが、パッケージ呼び出し (CTI_MATRIX) では所有者のプレフィックスを付けていますが、の宣言では付けていませんRETURN_RECORDSET AMD.REF_CURSOR;。パッケージのコピーを持っている別のユーザーとしてこれを呼び出すと、AMDこのエラー メッセージが表示されます。

また、4 行目のレコードセットに割り当てる必要はありませんNULL

于 2013-01-13T08:42:19.003 に答える
0

プロシージャでは、2 番目のパラメータのタイプは「REF_CURSOR」ですが、テスト用の pl/sql ブロッ​​クでは「AMD.REF_CURSOR」です。2つのタイプが同じかどうかを確認してください。そうではないと思います。または、次のように変数を定義するように、テスト用の pl/sql ブロッ​​クを変更します。

RETURN_RECORDSET CTI_MATRIX.AMD.REF_CURSOR;
于 2013-01-13T08:54:33.970 に答える