Symfoware Parallel Server RDBユーザーズガイド 応用プログラム開発編
目次 索引 前ページ次ページ

付録A SQLSTATE値

応用プログラム中で、SQL文の実行結果は状態変のSQLSTATEに通知されます。したがって、応用プログラムは、SQL文を実行するたびにSQLSTATEをチェックして、Symfoware/RDBの処理結果を確認しながら処理を進めることができます。

■SQLSTATE

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

表:SQLSTATE値に、SQL文の実行結果に対するコードの値を示します。

[表: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

なし

21

基数違反

000

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

22

データ例外

001

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

002

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

003

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

005

代入規則違反

008

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

011

部分文字列の指定に誤り

012

除数0による除算

015

扱える時間隔の範囲を超えた

018

型変換を行う文字列の形式に誤り

019

エスケープ文字の不当

024

正しくない文字型ホスト変数(入力ホスト変数の定義サイズ内にナル文字が存在していない)

027

TRIM文字の指定に誤り

701

正しくない可変長文字列(長さ部の値が0未満、または、定義サイズを超えている)

702

DSI範囲外アクセス

703

正しくない数値(固定小数点の符号部の値が不当)

704

正しくない文字(各国語文字列の値が不当)

23

NOTNULL制約違反,一意性制約違反

000

なし

24

カーソル状態不当

000

なし

25

トランザクション状態不当

000

なし

26

SQL文識別子不当

000

なし

28

パスワードが不当

000

なし

2E

コネクション名が不当

000

なし

2F

ルーチン呼び出しエラー

000

なし

33

記述子名不当

000

なし

34

カーソル名不当

000

なし

37

SQL文構文エラー

000

なし

3D

カタログ名不当

000

なし

3F

スキーマ名不当

000

なし

40

トランザクションロールバック

001

トランザクション直列化に失敗または実時間オーバー

003

文終了不明(処理時間オーバーまたは強制終了)

701

テンポラリログ領域不足

702

COMMIT実行時エラー

801

定義系処理異常

42

アクセス規則違反

000

権限なし

44

ビューに対する更新でWITHCHECKOPTIONに違反

000

なし

70

定量制限

000

なし

71

環境不整合または運用矛盾

000

OSの制限値を超えた

001

Symfoware/RDBが未起動

002

サーバシステムが未起動

010

環境変数または、動作環境ファイルの形式が不当

020

Symfoware/RDBの制限値を超えた

71

環境不整合または運用矛盾

030

Symfoware/RDB環境矛盾

210

DSIが未定義またはDSIが未選択

220

DSIが未フォーマット

300

カーソル矛盾

400

利用規定(注)

410

アクセス禁止

500

データベース未定義またはDSO未定義

600

セションロック不可状態

700

トランザクションの実行多重度オーバー

710

リカバリ要状態

720

データベースまたは、RDBディクショナリの矛盾

730

定義系処理異常

740

分割転送での矛盾

800

DSI自動容量拡張での異常

72

外部記憶領域等の不足

000

DSIの格納領域不足

010

データベーススペース不足

100

ディレクトリ領域不足

72

外部記憶領域等の不足

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

システム異常

注)RDA接続の場合のみ指定可能です。

RDA: SERVER_SPECでRDAを指定した場合の有効性

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

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

表:SQLSTATE値とトランザクションの関係に、これらの関係を示します。

[表:SQLSTATE値とトランザクションの関係]

TRAN_SPEC(注)

SQLSTATEの例外コード

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

応用プログラムでの対処

NONE

00、02

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

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

40

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

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

上記以外

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

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

TRANSACTION_ROLLBACK

00、02

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

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

40

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

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

上記以外

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

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


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2006