SQLSTATEは、SQL文のステータス情報を受け取る変数です(埋め込みSQLアプリケーションではホスト変数として明示的に宣言され、ストアド プロシージャではステータス変数として暗黙的に宣言されます)。この情報は、エラー コードや警告コード、および制御文を含めたSQL文の状態です。
ANSI準拠
SQLSTATEは、ANSI/ISO SQL:2011に準拠しています。開発するすべての新規アプリケーションで、SQLCODEの代わりに使用する必要があります。
ストアド プロシージャ プログラムによって使用されるSQLSTATEステータス変数は、ANSI/ISO SQL:2011規格ではありません。
SQLSTATEまたはSQLCODEのいずれかが、ANSIセッション モードで作成されたすべての埋め込みSQLアプリケーションに対して宣言される必要があります。
Teradataセッション モードで実行している埋め込みSQLアプリケーションには、SQLSTATEは有効ではありません。
SQLSTATEがエラー コードを受け取る場所
- CLI/TDP
- データベース
- Preprocessor2実行時管理プログラム
SQLSTATEの構造
SQLSTATEは、5文字の文字列値で、論理的には2文字のクラスと3文字のサブクラスに分けられます。SQLSTATEクラス定義に、ANSI/ISO SQL:2011で定義されているSQLSTATEクラスがリストされています。
サブクラス値は、任意の数値または単一の大文字のローマ字文字列にすることができます。
埋め込みSQLのSQLSTATE型定義
Preprocessor2では、示されているクライアント アプリケーション言語で、次のSQLSTATEデータ型定義が必要です。
クライアント言語 | データ型定義 |
---|---|
|
CHARACTER(5) |
C | CHARACTER(6) 6番目の文字は、必ずヌル終了記号になります。 |
SQLSTATEの宣言
- 埋め込みSQLアプリケーションの場合、SQLSTATEはSQL DECLARE SECTION内で明示的に宣言する必要があります。
- ストアド プロシージャ アプリケーション内では、SQLSTATEは暗黙的に宣言されます。
SQLSTATEおよびSQLCODE両方の使用
同じ埋め込みSQLコンパイル単位内で、SQLSTATEとSQLCODEの両方を定義できます。
また、同じストアド プロシージャ内で、SQLSTATEおよびSQLCODE変数の両方の値をテストできます。
いずれの場合も、両方の構造に有効な結果コードが含まれます。
データベース エラー コードをSQLSTATEにマッピングする仕組み
- マッピングされないCLI/TDPエラーは、クラスT0です。
そのサブクラスには、3桁のCLIエラー コードが含まれます。
例えば、CLIエラー157 (無効なUse_Presence_Bitsオプション)は、クラスT0とサブクラス157を生成します。
- マッピングされないデータベース エラーは、クラスT1~クラスT9です。
クラス番号の数字は、データベース エラー コードの最初の数字に対応します。
サブクラスには、残りの3桁のデータベース エラー コードが含まれます。
たとえば、エラー3776 (終了しないコメント)は、クラスT3とサブクラス776を生成します。
SQLCODEからSQLSTATEへの例外マッピング
SQLCODE値の中には、CLI、TDP、またはTeradata SQL内に起因しないエラーによって生成されるものがあります。
ストアド プロシージャでのSQLSTATE使用上の制約
- SET文のオペランドとしての使用。
例えば、次のような文が可能です。
SET hErrorMessage = 'SQLSTATE' || sqlstate; SET hSQLSTATE = SQLSTATE;
- ストアド プロシージャ内のSQL文の式としての使用。
例えば、次のような文が可能です。
INSERT INTO table_1 (column_1) VALUES (:SQLSTATE); UPDATE table_1 SET column_1 = column_1 + :ACTIVITY_COUNT;
- SQLSTATEは明示的に宣言できない。
- SQLSTATEは値または式にSETできない。
例えば、次の文は無効です。
SET SQLSTATE = h1 + h2;
- SQLSTATEは、SELECT文のINTO句には指定できない。
例えば、次の文は無効です。
SELECT column_1 INTO :SQLSTATE FROM table_1;
- SQLSTATEは、CALL文のINOUTおよびOUTパラメータの代わりには指定できない。
関連情報
- 埋め込みSQLアプリケーションとストアド プロシージャ アプリケーションでのSQLSTATEクラス定義およびマッピングの完全なセットは、SQLSTATEのマッピングに記載されています。
- データベース エラー コードは、<Teradata Vantage™ - Databaseメッセージ、B035-1096>を参照してください。
- コードの例外マッピングについては、SQLコミュニケーション領域(SQLCA)を参照してください。