1.8.1 エラーの判定と対処

<この項の構成>
(1) リターンコードの参照
(2) リターンコードの判定例
(3) エラー検出時の対処

(1) リターンコードの参照

SQL実行時にXDBでリターンコード(SQLCODE)が設定されます。ただし,DECLARE CURSORのような宣言文の場合は,リターンコードが設定されません。リターンコードを参照する場合の変数名称を次に示します。

SQLCODE変数の設定値を参照することで,SQL文の実行状態が判定できます。

SQL文の実行状態と変数に設定される値の関係を次の表に示します。

表1-23 SQL文の実行状態と変数に設定される値の関係

項番SQL文の実行状態SQLCODE変数の値SQLWARN0の値SQLWARN6の値
1正常終了警告なし0'△''△'
2警告あり0'W''△'
3データなし100'△''△'
4エラー終了中断状態なし0より小さい'△'または'W''△'
5中断状態発生0より小さい'W''W'
(凡例)
△:空白を示します。
注※
警告情報はSQLWARN1~Fに設定されます。警告情報が設定された場合は,SQLWARN0に'W'が設定されます。
SQLWARN0に'W'が設定されている場合,SQLWARN1~Fの領域を確認します。
なお,SQLWARN0~Fの内容については,「1.9 SQL連絡領域」を参照してください。

(2) リターンコードの判定例

リターンコードの判定例を次に示します。

(a) SQLCODE=100の場合

検索する行がなくなったと判定します。

特に次に示す内容を判定するときに有効です。

(b) SQLCODE<0の場合

SQLエラーが発生したと判定します。

SQLエラーが発生した場合,中断状態になる場合とならない場合があります。SQLWARN6='W'の場合,暗黙的にデータベースへの更新が無効にされて中断状態になったと判定します。

(c) 上記の(a)および(b)以外の場合

正常終了したと判定します。

正常終了には,警告情報がある場合とない場合があります。SQLWARN0='W'の場合,警告付き正常終了と判定します。

(3) エラー検出時の対処

エラーを検知した場合,次に示す順番で対処します。

  1. リターンコードを出力,または表示します。
  2. リターンコードだけではエラーの内容が判別しにくい場合,各コードの付加情報を表示,または出力します。また,必要に応じて,エラーになったSQL文,またはエラーになったSQL文を識別するための情報を表示します。
    リターンコードの付加情報と参照先を次の表に示します。

    表1-24 リターンコードの付加情報と参照先

    項番付加情報参照先
    1SQLCODEに対応するメッセージSQL連絡領域中のSQLERRML領域,およびSQLERRMC領域の内容
  3. トランザクションを取り消します(ロールバック,またはUAPを異常終了させます)。中断状態を発生させたUAPからはロールバック以外は受け付けられません。
  4. UAPの終了,またはトランザクションの開始(別のトランザクションの新規実行,または同じトランザクションの再実行)をします。
    なお,同じトランザクションを再実行する場合,実行前にエラーの対策をしてください。エラーの原因が取り除かれていない状態でトランザクションを再実行すると,無限ループになるおそれがあります。また,トランザクションを再実行しても同じエラーが発生する場合は,UAPの終了を検討する必要があります。