ページの先頭行へ戻る
Symfoware Server V10.0.0 アプリケーション開発ガイド(共通編)

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

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

トランザクションがロールバックされるエラーの場合のSQLSTATE:

40xxx

トランザクションが継続されるエラーの場合SQLSTATE:

40xxx以外

トランザクションが継続されるエラー

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

なお、動作環境ファイルのパラメタ“TRAN_SPEC”の指定により、トランザクションの対処方法を変更することができます。

動作環境ファイルについては、“2.1.1 動作環境ファイル”を参照してください。

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

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

トランザクションがロールバックされるエラー

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

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