Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


13.8.3 ODBC関数の非同期実行のキャンセル

〈この項の構成〉

(1) 非同期実行をキャンセルするには

非同期実行中のODBC関数をキャンセルするには,SQLCancelを呼び出します。

SQLCancelは,指定されたhstmtが現在非同期実行中であることを確認できた時点で,サーバに対して処理のキャンセル要求をします。

SQLCancelの戻り値では,キャンセル要求が終了したかどうかを通知し,実際に非同期実行の関数がキャンセルされたかどうかは処理中の非同期実行の関数を呼び出して,その戻り値で判断します。関数が実行中の場合はSQL_STILL_EXECUTINGが返され,キャンセル処理が終了している場合はSQL_ERRORとSQLSTATE S1008(処理のキャンセル)が返されます。また,既に正常に終了していた場合や,ほかのエラーが発生した場合には,SQL_SUCCESSやSQL_ERRORなどのコードが返ります。

(2) マルチスレッドのアプリケーションプログラムでの非同期実行のキャンセル

マルチスレッドのアプリケーションプログラムでは,hstmtで同期実行しているODBC関数をキャンセルできます。キャンセルする場合,アプリケーションプログラムはキャンセルする関数に使用されているhstmtと同じhstmtで,異なるスレッドからSQLCancelを呼び出します。

SQLCancelの戻り値には,ドライバが要求を正しく受けたかどうかを表す値が返されます。また,元の関数の戻り値には,SQL_SUCCESS,又はSQL_ERRORとSQLSTATE S1008(処理のキャンセル)が返されます。

注意:

HiRDBのキャンセル処理は接続単位で実行され,いったんサーバとの接続が強制的に切断されます(サーバ側でKFPS00993-I:サーバプロセス終了REQUEST=clt_attentionが出力されます)。そのため,指定したhstmtに関連するhstmtの,すべてのステートメントがキャンセル(トランザクションはロールバック)されます。したがって,非同期実行中のODBC関数をキャンセルする場合,更新途中のデータを十分考慮する必要があります。