ページの先頭行へ戻る
Symfoware Server アプリケーション開発ガイド(埋込みSQL編)

付録C SQLSTATE値

アプリケーション中で、SQL文の実行結果は状態変数のSQLSTATEに通知されます。したがって、アプリケーションは、SQL文を実行するたびにSQLSTATEをチェックして、Symfoware/RDBの処理結果を確認しながら処理を進めることができます。

SQLSTATE

状態変数のSQLSTATEは、5桁の文字列型の変数です。SQL文を実行した結果、SQLSTATEに設定される値を“状態コード”と呼びます。状態コードの先頭の2桁を“例外コード”と呼び、うしろの3桁を“副例外コード”と呼びます。

SQL文の実行結果に対するコードの値を以下に示します。

表C.1 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

なし

21

基数違反

000

単一行SELECT文の実行で2行以上が検索された、または、比較述語に直接含まれる副問合せの結果が2行以上検索された

22

データ例外

001

文字データの右側を切り捨てた(トランケート)

002

NULL値を設定する標識変数の指定がない

003

扱える数値の範囲を超えた

005

代入規則違反

008

扱える日時の範囲を超えた

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
(注2)

利用者が送信した例外

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” で参照してください。

SQLSTATE値とトランザクションの関係

SQL文を実行した結果により、トランザクションは開始された状態が継続される場合と、終了してアプリケーションに復帰する場合があります。また、SQL文でエラーが発生した場合のトランザクションの扱いを、動作環境ファイルのパラメタTRAN_SPECで指定することができます。動作環境ファイルについては、“6.4 アプリケーションのチューニング”を参照してください。

これらの関係を以下に示します。

表C.2 SQLSTATE値とトランザクションの関係

TRAN_SPEC(注)

SQLSTATEの例外コード

復帰時のトランザクションの状態

アプリケーションでの対処

NONE

00、02

トランザクションは開始された状態が継続しています。

そのまま次の処理に進みます。

40

トランザクションはロールバックされ終了しています。

無効となったトランザクションを再実行(リトライ)するかどうかを決定します。

上記以外

トランザクションは開始された状態が継続しています。該当のSQL 文によるデータベースの更新は、実行直前の状態に戻されています。ただし、それまでに獲得されたデータベース資源のロックとカーソルの位置はそのまま保持されます。

エラーの原因によりトランザクションを継続させるか終了させるかを決定します。

TRANSACTION_ ROLLBACK

00、02

トランザクションは開始された状態が継続しています。

そのまま次の処理に進みます。

40

トランザクションはロールバックされ終了しています。

無効となったトランザクションを再実行(リトライ)するかどうかを決定します。

上記以外

トランザクションはロールバックされ終了しています。

エラーの原因を取り除いて、トランザクションの処理を最初からやり直す必要があります。このためSQL 文の実行でエラーを起こさないように、アプリケーションで入力データのチェックなどを行います。

注) 動作環境ファイルのパラメタ“TRAN_SPEC”に設定された値を示します。

被トリガSQL文の実行でエラーの場合の注意事項

アプリケーションの実行時に、被トリガSQL文の実行がエラーとなった場合、トリガ契機となったSQL文のSQLSTATEの値は、以下に示す値になります。

表C.3 トリガ契機となったSQL文のSQLSTATE

被トリガSQL文のSQLSTATE

トリガ契機となったSQL文のSQLSTATE

備考

4xxxx

4xxxx

SQLSTATEとエラーメッセージが、そのままトリガ契機となったSQL文の実行結果に引き継がれます。

7xxxx

7xxxx

上記と同じです。

その他

09000

トリガ契機となったSQL文のSQLSTATEは、09000となり、そのエラーメッセージは、被トリガのSQL文のエラーメッセージが埋め込まれます。