2016-11-16 8 views
1

でクエリキャンセルすることができません:次のクエリを使用して私はDB2で次のストアドプロシージャ持つDB2

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 

を、私は私の接続IDを見つけることができています:

返します
SELECT MON_GET_APPLICATION_HANDLE() from SYSIBM.SYSDUMMY1 

36547のような値です。だから私は、私はちょうどそうのように作成したプロシージャを呼び出す:

CALL CANCEL_ACTIVITY(36547); 

その結果、私は次を得る:

enter image description here

しかし、私は再び接続IDを取得するクエリを実行した場合、それその接続IDがなくなったようには見えません。私はまだ36547値を返します。

このクエリキャンセルがまったく機能しているかどうかはかなりわかります。コードを実行しているさまざまな環境でさまざまな種類のエラーが発生しています。

SQLクエリとして実行しているとき、上記のエラーコード/応答が表示されます。私のコードが私のウェブページで実行されているとき、私は次のエラーを受け取ります:

Cannot cancel queries: Java::ComIbmDb2JccAm::SqlDataException: DB2 SQL Error: SQLCODE=-802, SQLSTATE=22003, SQLERRMC=null, DRIVER=4.16.53 

私は間違って何をしていますか?

答えて

2

DB2のマニュアルでCanceling Activiesを読むことをお勧めします。アクティビティをキャンセルすると、接続を閉じますが、選択クエリまたは他の実行中のタスクを中止されていません。

If an activity is consuming too many resources, or is running too long, you can cancel it. Canceling an activity is gentler than forcing the application that submitted the activity. A canceled activity returns SQL4725N to the user, but does not end the connection or affect any other user activity. Forcing the application ends both the connection and user activities.

あなたの手順では、アプリハンドル、UOW、比活性のIDを探しています。キャンセルしようとしている活動が何か/行っているのか見たことがありますか? WLM_CAPTURE_ACTIVITY_IN_PROGRESSを使用して、最初にそのアクティビティに関する情報をダンプして、シナリオをデバッグできます。

+0

こんにちは@data_henrik - 説明をいただきありがとうございます。これは、アクティビティをキャンセルする完全なクエリですか? 'CALL WLM_CANCEL_ACTIVITY(1,2,5) ' – theGreenCabbage

+0

はい、アプリケーションハンドル/ UOW識別子/アクティビティID。 –

+0

あなたが私の手続きをチェックすると、それは私がやっていることです、いいえ? 'CALL WLM_CANCEL_ACTIVITY(..) 'を使用します。 – theGreenCabbage

関連する問題