現在、RazorSQLを使用してIBM DB2でクエリをテストしています。今、私は手続きを作成することに問題が残っていますDB2ストアドプロシージャSQLCODE = -440、SQLSTATE = 42884を返す
私は以下の手順を持っています。私はdb2inst1
と呼ばれる管理者ユーザとしてこのプロシージャを作成します。
CREATE OR REPLACE PROCEDURE CANCEL_ACTIVITY (IN application_handle INTEGER)
LANGUAGE SQL
BEGIN
DECLARE UOW_ID INTEGER;
DECLARE ACTIVITY_ID INTEGER;
FOR v AS cur1 CURSOR FOR
SELECT UOW_ID, ACTIVITY_ID FROM TABLE(SYSPROC.MON_GET_ACTIVITY(application_handle, -1))
DO
CALL WLM_CANCEL_ACTIVITY(application_handle, v.uow_id, v.activity_id);
END FOR ;
END
さて、私は管理者ではありませんapplicationtest
と呼ばれる私の通常のユーザーにログオン。私は次のことを実行する場合:
CALL CANCEL_ACTIVITY(12345)
私は次のエラーを取得する:
DB2 SQL Error: SQLCODE=-440, SQLSTATE=42884, SQLERRMC=CANCEL_ACTIVITY;PROCEDURE, DRIVER=4.16.53
IBMによると、それはによって引き起こされています:このquestionを見て
NO AUTHORIZED routine-type BY THE NAME routine-name HAVING COMPATIBLE ARGUMENTS WAS FOUND
、私はこのデバッグを実行しました結果が次のとおりであるため、ユーザーが同じで、同じではないと確認するコード:
| ROUTINESCHEMA
1 | db2inst1
2 | DB2INST1
論理的には、ROUTINESCHEMA
には正規ユーザーapplicationtest
が必要ですか。
私も次のことを実行しました:
GRANT EXECUTE ON PROCEDURE CANCEL_ACTIVITY TO PUBLIC;
それが役立つだろうかどうかを確認し、それでも、同じエラーします。
また、applicationtest
を使用してプロシージャを作成しようとしましたが、期待どおり、必要な権限がありません。
EDIT:
私はちょうどDB2INST1.CANCEL_PROCEDURE(12345)指定された、そして今、私は次のエラーを取得しています:
2016-11-18 11:27:34.983 -0800 [ERROR|01c56|] :: Java::ComIbmDb2JccAm::SqlSyntaxErrorException : DB2 SQL Error: SQLCODE=-551, SQLSTATE=42501, SQLERRMC=APPLICATIONTEST;EXECUTE;DB2INST1.CANCEL_ACTIVITY, DRIVER=4.16.53
私は、ユーザーapplicationtest
が、その手順を実行する権限を持っていないことを推測?
私は2つの質問がある:
それがプロシージャを呼び出す前にDB2INST1を呼び出す必要はありませんすることは可能ですか?だから
CALL DB2INST1.CANCEL_ACTIVITY
ではなくCALL CANCEL_PROCEDURE(..)
のように呼び出すことができます。applicationtest
にプロシージャを呼び出すための権限を与える方法を教えてください。
こんにちは@angoca!ありがとうございます - 私は現在のパスを設定する場合は、現在のセッションと現在のユーザーのためだけですか、それともグローバルに設定されていますか?将来、 'CALL CANCEL_ACTIVITY()'を呼び出すことができますか? – theGreenCabbage
設定されたパスの有効範囲は、現在のセッションの範囲です。データベースに接続するたびに、そのレジスタを変更する必要があります。 – AngocA