2.7.3 DMLのエラーを検出したときの対処方法
DMLのエラーの発生を示すSQLCODEが返却された場合,次の手順で対処します。
手順
-
リターンコードを出力または表示します。
-
リターンコードだけではエラーの内容が判別できない場合は,各コードの付加情報を表示または出力します。また,必要に応じて,エラーになったDML,またはエラーになったDMLを識別するための情報を表示します。
リターンコードの付加情報と参照先を次の表に示します。
表2‒5 リターンコードの付加情報と参照先 付加情報
参照先
SQLCODEに対応するメッセージ
SQL連絡領域中のSQLERRMLフィールド,およびSQLERRMCフィールドの内容
-
トランザクションを取り消します(ROLLBACK,またはUAPを異常終了させます)。
デッドロックによって暗黙的にロールバックされたUAPは次のようになります。
-
通常のUAPの場合
暗黙的にロールバックされると,次に実行したDMLまたはSQLが新たなトランザクション開始となります(ROLLBACK,またはDISCONNECTもできます)。
-
OLTP下のUAPの場合
暗黙的にロールバックされると,OLTP下のUAPからはDISCONNECT,またはROLLBACK以外は受け付けられません。また,OLTP環境でX/Openに従ったアプリケーションプログラムをクライアントとした場合に,実行したアプリケーションプログラムがデッドロックになったときもトランザクションの終了が必要です。
-
-
UAPの終了,またはトランザクションの開始(別のトランザクションの新規実行,または同じトランザクションの再実行)をします。
なお,同じトランザクションを再実行する場合,実行前にエラーの対策をしてください。エラーの原因が取り除かれない状態でトランザクションを再実行すると,無限ループになるおそれがあります。また,再実行しても同じエラーが発生する場合は,UAPの終了を考慮する必要があります。