2017-07-12 13 views
0

私はストアドプロシージャが初めてです。基本的には、私はストアドプロシージャを作成しようとしていますが、テーブルにレコードを挿入するためにdb2コマンドラインインターフェイスから呼び出そうとしています。db2ストアドプロシージャの互換性のない引数エラー

ストアドプロシージャがデータベースに正常に作成されます。しかし、ストアドプロシージャを呼び出す引数を渡すと、以下のエラーがスローされます。

SQL0440Nがタイプ「PROCEDURE」の「COM_PROC_INSERT_FAILURE_XMESSAGE_MAIN」互換性のある引数を持つという名前の認可ルーチンが見つかりませんでした。 SQLSTATE = 42884

私はXMESSAGEテーブルを作成しました。ストアドプロシージャは、XMESSAGEテーブルの同じデータ型に基づいて作成されています。

私が作成したストアドプロシージャは、ここに示されています:

CREATE PROCEDURE com_proc_insert_failure_XMESSAGE_main(
    OUT errmsg CHAR(5), 
    IN XMESSAGE_ID BIGINT, 
    IN XMESSAGETYPE_ID CHAR(32), 
    IN ISPROCESSED INTEGER, 
    IN FOREIGN_ID BIGINT, 
    IN FIELD1 VARCHAR(254), 
    IN FIELD2 VARCHAR(254), 
    IN FIELD3 VARCHAR(4000), 
    IN ORDER_ID VARCHAR(30) 
) 
LANGUAGE SQL 
BEGIN 

DECLARE SQLSTATE CHAR(5); 

INSERT INTO XMESSAGE (XMESSAGE_ID, XMESSAGETYPE_ID, ISPROCESSED, FOREIGN_ID, FIELD1, FIELD2, FIELD3, ORDER_ID) 
VALUES (XMESSAGE_ID, XMESSAGETYPE_ID, ISPROCESSED, FOREIGN_ID, FIELD1, FIELD2, FIELD3, ORDER_ID); 

SET errmsg = SQLSTATE; 

[email protected] 

私は私が正しくパラメータを渡しています信じて

db2 "call com_proc_insert_failure_XMESSAGE_main(?, 123456789,'TEST_MESSAGE',1,1,'TESTMESSAGE','111','test','12345')" 

以下のように私には、DB2コマンド・ライン・インターフェースから、ストアドプロシージャを呼び出しています。誰かが私に問題が起こっていることを教えてもらえますか?前もって感謝します!

答えて

0

「プロシージャの作成」時に使用されたスキーマが、コール時にデフォルトスキーマと一致するかどうかを確認してください。 procschemaカラムのsyscat.proceduresエントリは、コール時に暗黙のauth-idでなければなりません。そうでない場合は、呼び出し時にそのprocschemaでsproc名を修飾してください。

+0

あなたは正しいです!データベースは正しいユーザーの代わりに管理者としてログインしていました。私がprocschemaからの値で正しくログインしたとき、正常に動作し始めました。 ご協力ありがとうございます!!!!! – Krish