アプリケーション中で、SQL文の実行結果は状態変数のSQLSTATEに通知されます。したがって、アプリケーションは、SQL文を実行するたびにSQLSTATEをチェックして、Symfoware/RDBの処理結果を確認しながら処理を進めることができます。
SQLSTATE
状態変数のSQLSTATEは、5桁の文字列型の変数です。SQL文を実行した結果、SQLSTATEに設定される値を“状態コード”と呼びます。状態コードの先頭の2桁を“例外コード”と呼び、うしろの3桁を“副例外コード”と呼びます。
SQL文の実行結果に対するコードの値を以下に示します。
参照
クラスタシステム利用時のクラスタ切替え時に返却されるSQLSTATEについては、“クラスタ導入運用ガイド”の“SQLSTATE値”を参照してください。
例外  | 例外条件  | 副例外コード  | 副例外コードの意味  | 
|---|---|---|---|
00  | 正常終了  | 000  | なし  | 
01  | 警告  | 005  | なし  | 
02  | データなし  | 000  | なし  | 
07  | 動的SQLエラー  | 000  | なし  | 
001  | USING句が被準備文内の動的パラメタと対応しない  | ||
002  | USING句が被準備文内の選択リスト(相手指定)と一致しない  | ||
003  | 被準備文が<カーソル指定>である  | ||
004  | 動的パラメタ指定に対するUSING句が指定されていない  | ||
005  | 被準備文が<カーソル指定>でない  | ||
006  | 埋め込みホスト変数属性違反(制限されたデータ型属性を指定)  | ||
007  | (相手指定に対する)結果USINGが指定されていない  | ||
008  | SQL記述子域の個数不当  | ||
009  | SQL記述子域のインデックス不当  | ||
08  | コネクション違反  | 000  | コネクションの利用方法の誤り  | 
002  | 使用中のコネクション  | ||
003  | コネクションが存在しない  | ||
004  | SQLサーバがSQLコネクションの接続を拒絶した  | ||
09  | 被トリガ動作例外  | 000  | なし  | 
0A  | 未サポート機能  | 000  | なし  | 
0P  | ロール名不当  | 000  | なし  | 
10  | XQuery式エラー  | 000  | なし  | 
21  | 基数違反  | 000  | 単一行SELECT文の実行で2行以上が検索された、または、比較述語に直接含まれる副問合せの結果が2行以上検索された  | 
22  | データ例外  | 001  | 文字データの右側を切り捨てた(トランケート)  | 
002  | NULL値を設定する標識変数の指定がない  | ||
003  | 扱える数値の範囲を超えた  | ||
005  | 代入規則違反  | ||
008  | 扱える日時の範囲を超えた  | ||
00M  | 正しくないXML形式のデータ  | ||
011  | 部分文字列の指定に誤り  | ||
012  | 除数0による除算  | ||
015  | 扱える時間隔の範囲を超えた  | ||
018  | 型変換を行う文字列の形式に誤り  | ||
019  | エスケープ文字の不当  | ||
024  | 正しくない文字型ホスト変数(入力ホスト変数の定義サイズ内にNULL文字が存在していない)  | ||
027  | TRIM文字の指定に誤り  | ||
701  | 正しくない可変長文字列(長さ部の値が0未満、または、定義サイズを超えている)  | ||
702  | DSI範囲外アクセス  | ||
703  | 正しくない数値(固定小数点の符号部の値が不当)  | ||
704  | 正しくない文字(各国語文字列の値が不当)  | ||
23  | NOT NULL制約違反、一意性制約違反  | 000  | なし  | 
24  | カーソル状態不当  | 000  | なし  | 
25  | トランザクション状態不当  | 000  | なし  | 
26  | SQL文識別子不当  | 000  | なし  | 
28  | パスワードが不当  | 000  | なし  | 
2B  | 依存する権限記述子がまだ存在する(注1)  | 000  | なし  | 
2E  | コネクション名が不当  | 000  | なし  | 
2F  | ルーチン呼び出しエラー  | 000  | なし  | 
003  | 禁止されているSQL文の実行  | ||
33  | 記述子名不当  | 000  | なし  | 
34  | カーソル名不当  | 000  | なし  | 
37  | SQL文構文エラー  | 000  | なし  | 
3C  | あいまいなカーソル名  | 000  | なし  | 
3D  | カタログ名不当  | 000  | なし  | 
3F  | スキーマ名不当  | 000  | なし  | 
40  | トランザクションロールバック  | 001  | トランザクション直列化に失敗または実時間オーバ  | 
003  | 文終了不明(処理時間オーバまたは強制終了)  | ||
701  | テンポラリログ領域不足  | ||
702  | COMMIT実行時エラー  | ||
703  | アクセス中のノードダウン  | ||
704  | アーカイブログファイル不足  | ||
705  | Connection Managerの強制終了  | ||
801  | 定義系処理異常  | ||
42  | アクセス規則違反  | 000  | 権限なし  | 
44  | ビューに対する更新でWITH CHECK OPTIONに違反  | 000  | なし  | 
60  | 利用者送信例外  | XXX  | 利用者が送信した例外  | 
70  | 定量制限  | 000  | なし  | 
71  | 環境不整合または運用矛盾  | 000  | OSの制限値を超えた  | 
001  | Symfoware/RDBが未起動  | ||
002  | サーバシステムが未起動  | ||
003  | ダウン中ノードへのアクセス要求  | ||
004  | 外部プロセスダウン  | ||
010  | 環境変数または、動作環境ファイルの形式が不当  | ||
020  | Symfoware/RDBの制限値を超えた  | ||
030  | Symfoware/RDB環境矛盾  | ||
031  | コード変換ライブラリロード失敗  | ||
210  | DSIが未定義またはDSIが未選択  | ||
220  | DSIが未フォーマット  | ||
300  | カーソル矛盾  | ||
400  | 利用規定(注3)  | ||
410  | アクセス禁止  | ||
500  | データベース未定義またはDSO未定義  | ||
510  | 検索パス未創成  | ||
600  | セションロック不可状態  | ||
700  | トランザクションの実行多重度オーバ  | ||
710  | リカバリ要状態  | ||
720  | データベースまたは、RDB ディクショナリの矛盾  | ||
730  | 定義系処理異常  | ||
740  | 分割転送での矛盾  | ||
750  | 一時表の制限値オーバ  | ||
800  | DSI自動容量拡張での異常  | ||
900  | 待機系のRDBシステムでのSQL文の実行  | ||
A00  | 順序の利用順違反  | ||
72  | 外部記憶領域などの不足  | 000  | DSIの格納領域不足  | 
010  | データベーススペース不足  | ||
100  | ディレクトリ領域不足  | ||
200  | 作業用テーブル領域不足  | ||
73  | メモリの領域不足  | 100  | ローカルメモリのプール数が設定上限値を超えた  | 
110  | ローカルメモリの不足  | ||
200  | 共用メモリのプール数が設定上限値を超えた  | ||
210  | 共用メモリの不足  | ||
300  | 共用バッファの不足  | ||
74  | 外部記憶領域への入出力異常  | 000  | データベーススペースの入出力異常  | 
010  | データベーススペースのアクセス権なし  | ||
100  | ディレクトリ領域への入出力異常  | ||
110  | ディレクトリ領域のアクセス権なし  | ||
200  | 作業用ファイルの入出力異常  | ||
210  | 作業用ファイルのアクセス権なし  | ||
400  | テンポラリログ領域の入出力異常  | ||
410  | テンポラリログ領域のアクセス権なし  | ||
500  | スナップファイルへの入出力異常  | ||
600  | その他のファイルの入出力異常  | ||
610  | アクセス権なし  | ||
720  | RDBディクショナリの入出力異常  | ||
75  | コネクション環境異常  | 000  | コネクション実行環境の異常  | 
76  | システム環境異常  | 000  | システム異常  | 
77  | 他製品の動作異常  | 000  | PowerAIM/TJNLで異常検出  | 
010  | TJNLが未起動  | ||
100  | Accela BizSearchで異常検出  | 
注1) 権限記述子は、以下の項目からなります。
権限受領者が所有する資源( 表、ビューなど)
権限受領者が他の認可識別子に付与した権限
注2) SIGNAL文の副例外コードで設定する0~9およびA~Zまでの任意の文字を3桁で表現します。
注3) 処理対象のDSI に対するrdbfmtコマンドを実行中の場合にも設定されることがあります。
参照
ODBCに対応したパソコンツールとの連携で対応するコードが表に存在しない場合には、“MSDNライブラリ Visual Studio” で参照してください。
SQL文を実行した結果により、トランザクションは開始された状態が継続される場合と、終了してアプリケーションに復帰する場合があります。また、SQL文でエラーが発生した場合のトランザクションの扱いを、動作環境ファイルのパラメタTRAN_SPECで指定することができます。
参照
動作環境ファイルについては、“アプリケーション開発ガイド(共通編)”の“動作環境ファイルのパラメタ一覧”を参照してください。
これらの関係を以下に示します。
TRAN_SPEC(注)  | SQLSTATEの例外コード  | 復帰時のトランザクションの状態  | アプリケーションでの対処  | 
|---|---|---|---|
NONE  | 00、02  | トランザクションは開始された状態が継続しています。  | そのまま次の処理に進みます。  | 
40  | トランザクションはロールバックされ終了しています。  | 無効となったトランザクションを再実行(リトライ)するかどうかを決定します。  | |
上記以外  | トランザクションは開始された状態が継続しています。該当のSQL 文によるデータベースの更新は、実行直前の状態に戻されています。ただし、それまでに獲得されたデータベース資源のロックとカーソルの位置はそのまま保持されます。  | エラーの原因によりトランザクションを継続させるか終了させるかを決定します。  | |
TRANSACTION_ ROLLBACK  | 00、02  | トランザクションは開始された状態が継続しています。  | そのまま次の処理に進みます。  | 
40  | トランザクションはロールバックされ終了しています。  | 無効となったトランザクションを再実行(リトライ)するかどうかを決定します。  | |
上記以外  | トランザクションはロールバックされ終了しています。  | エラーの原因を取り除いて、トランザクションの処理を最初からやり直す必要があります。このためSQL 文の実行でエラーを起こさないように、アプリケーションで入力データのチェックなどを行います。  | 
注) 動作環境ファイルのパラメタ“TRAN_SPEC”に設定された値を示します。
アプリケーションの実行時に、被トリガSQL文の実行がエラーとなった場合、トリガ契機となったSQL文のSQLSTATEの値は、以下に示す値になります。
被トリガSQL文のSQLSTATE  | トリガ契機となったSQL文のSQLSTATE  | 備考  | 
|---|---|---|
4xxxx  | 4xxxx  | SQLSTATEとエラーメッセージが、そのままトリガ契機となったSQL文の実行結果に引き継がれます。  | 
7xxxx  | 7xxxx  | 上記と同じです。  | 
その他  | 09000  | トリガ契機となったSQL文のSQLSTATEは、09000となり、そのエラーメッセージは、被トリガのSQL文のエラーメッセージが埋め込まれます。  |