Symfoware(R) Server RDBユーザーズガイド 応用プログラム開発編 - FUJITSU - |
目次 索引 |
データ操作のSQL文の処理中に異常が発生した場合には、応用プログラムにエラーで復帰します。エラーで復帰したときのトランザクションの状態は、エラーの原因がデッドロックによる場合と、そうでない場合によって異なります。エラーの原因を示すコードは、状態変数“SQLSTATE”に設定されます。
エラーが発生したSQL文による更新は、そのSQL文を実行する直前の状態に戻されて応用プログラムへ復帰します。ただし、このSQL文の実行までに獲得されたデータベース資源の占有とカーソルの位置はそのまま保持されます。このとき、トランザクションは継続されたままになっています。トランザクションをそのまま継続させるか終了させるかは、エラーの原因ごとに利用者が応用プログラムの論理に従って決定します。たとえば、INSERT文で表にデータを繰り返し挿入するような処理では、あるデータが表の一意性制約に違反するエラーとなっても、そのデータを無視して引き続きデータを挿入すればよい場合には、トランザクションは継続させて処理を続行します。また、互いに関連のある複数の表を更新するような処理では、ある表の更新時にエラーが発生した場合、表の間での整合を保つために、ROLLBACK文を実行してトランザクションをロールバックします。
なお、動作環境ファイルのパラメタ“TRAN_SPEC”の指定により、トランザクションの対処方法を変更することができます。動作環境ファイルについては、“応用プログラムの動作環境のチューニング”を参照してください。
図:データ操作のSQL文の実行でエラーが発生した場合の例に、データ操作のSQL文の実行でエラーが発生した場合の例を示します。
エラーの原因がデッドロックによる場合は、トランザクションはロールバックされて応用プログラムへ復帰します。したがって、このSQL文の実行までに獲得されたデータベース資源のロックは解放され、オープン中のカーソルは閉じられます。
デッドロックが発生した場合の応用プログラムの対処方法については、“デッドロックの対処方法”で説明します。
目次 索引 |