Symfoware Server アプリケーション開発ガイド(埋込みSQL編) - FUJITSU -
目次 索引 前ページ次ページ

第2章 アプリケーションの設計> 2.4 トランザクションと排他制御

2.4.3 SQL文の処理結果異常とトランザクション

データ操作のSQL文の処理中に異常が発生した場合には、アプリケーションにエラーで復帰します。エラーで復帰したときのトランザクショの状態は、エラーの原因がデッドロッによる場合と、そうでない場合によって異なります。エラーの原因を示すコードは、状態変数“SQLSTATE”に設定されます。

状態変数“SQLSTATE”に設定される値は、以下のとおりです。

エラー原因がデッドロックの場合のSQLSTATE:40xxx
エラー原因がデッドロック以外の場合SQLSTATE:40xxx以外

■デッドロック以外のエラー発生時のトランザクショ

エラーが発生したSQL文による更新は、そのSQL文を実行する直前の状態に戻されてアプリケーションへ復帰します。ただし、このSQL文の実行までに獲得されたデータベース資源の占有とカーソルの位置はそのまま保持されます。このとき、トランザクションは継続されたままになっています。トランザクションをそのまま継続させるか終了させるかは、エラーの原因ごとに利用者がアプリケーションの論理に従って決定します。たとえば、INSERT文で表にデータを繰り返し挿入するような処理では、あるデータが表の一意性制約に違反するエラーとなっても、そのデータを無視して引き続きデータを挿入すればよい場合には、トランザクションは継続させて処理を続行します。また、互いに関連のある複数の表を更新するような処理では、ある表の更新時にエラーが発生した場合、表の間での整合を保つために、ROLLBACK文を実行してトランザクションをロールバッします。

なお、動作環境ファイルのパラメタ“TRAN_SPEC”の指定により、トランザクションの対処方法を変更することができます。動作環境ファイルについては、“アプリケーションのチューニング”を参照してください。

データ操作のSQL文の実行でエラーが発生した場合の例を以下に示します。

[図:データ操作のSQL文の実行でエラーが発生した場合の例]

■デッドロックによるエラー発生時のトランザクショ

エラーの原因がデッドロックによる場合は、トランザクションはロールバックされてアプリケーションへ復帰します。したがって、このSQL文の実行までに獲得されたデータベース資源のロックは解放され、オープン中のカーソルは閉じられます。

デッドロックが発生した場合のアプリケーションの対処方法については、“デッドロックの対処方法”で説明します。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2007-2008