SQLSTATE 関数

SQLSTATE はデータベース状態関数で、5 文字の CHARACTER データ・タイプを戻します。デフォルト値は '00000' (ストリングとしての 5 つのゼロ) です。

構文

メッセージ・フロー内で、外部データベース・リソースにアクセスしたり、これを更新することができます。これは、Filter、Database、および Compute ノードで使用可能な ESQL データベース関数を使用して行います。外部データベースに呼び出しを行うと、表が存在しない、データベースが利用不能である、すでに存在するキーの挿入などのエラーが生じる可能性があります。

これらのエラーが発生したら、ブローカーのデフォルトのアクションは、例外を生成することです。この動作は、プロパティー「データベース・エラーで例外をスローする」の設定の仕方によって決まります。このチェック・ボックスを選択する場合、ブローカーはノードの処理を停止し、メッセージをノードの障害端末に伝搬し、エラーの詳細を ExceptionList に記録します。デフォルトの動作をオーバーライドし、データベース・エラーをノードの ESQL で処理する場合、「データベース・エラーで例外をスローする」チェック・ボックスのチェックを外します。つまり、ブローカーは例外をスローしないので、特定の SQL 状態コードが期待されていない場合、THROW ステートメントを組み込んで例外をスローする必要があります。THROW の説明については、THROW ステートメントを参照してください。

ノードでデータベース・エラーを処理するよう選択した場合、データベース状態関数 SQLSTATE を使用して、ESQL で行われた DBMS 呼び出しの状況についての情報を受け取ることができます。この関数を現行ノードの ESQL の条件ステートメントに組み込んで、生じる可能性のあるエラーを認識して処理できます。

SQL 状態

ESQL では、SQL 状態は可変長の文字ストリングです。規則により、SQL 状態は 6 文字の長さで、文字 0 から 9 まで、および A から Z までのみが含まれます。6 文字の意義は以下のとおりです。
文字 1
例外の発生元。
文字 2、3
例外のクラス。
文字 4 から 6
例外のサブクラス。

例外の SQL 状態は、2 段階のプロセスによって判別されます。最初の段階では、例外情報が調べられ、元のエラーについて記述した例外が見つかるまで、ラッピング例外 (つまり、例外が起きた時点のブローカーの実行内容に関する情報) がステップオーバーされます。

2 番目の段階は以下のとおりです。
  1. データベース例外を選択した場合は、SQL 状態はデータベースによって提供される状態になります。ただし文字 "D" を前に付けて、ブローカーで起きた例外と混同しないようにします。SQL コード、ネイティブ・エラー、およびエラー・テキストは、データベースによって提供されるものになります。
  2. ユーザー例外を選択した (つまり、THROW ステートメントを起点にする) 場合は、SQL コード、状態、ネイティブ・エラー、およびエラー・テキストは、例外の挿入項目のうち最初の 4 つが順番に採用されます。結果の状態値は、現状のまま採用されます ("U" などの文字が前に付けられません)。実際に、文字 "U" はブローカーで発生元の標識として使用されません。既存の SQL 状態をまねるのではなく固有の SQL 状態を定義する場合は、先頭が文字 "U" の SQL 状態を使用してください。そうすれば、ハンドラーは LIKE’U%’演算子を使用して、ユーザー定義例外とユーザーがスローした例外をすべて突き合わせることができます。
  3. メッセージ・トランスポートまたは ESQL のインプリメンテーション自体が発生元の例外を選択した場合は、SQL コード、状態、ネイティブ・エラー、およびエラー・テキストは、以下のリストに記述されているものになります。
  4. 他のすべての例外の場合は、SQL 状態は '' になり、これは発生元、クラス、およびサブクラスがないことを示します。

現在空の SQL 状態になっている例外の中には、将来のリリースで個別の状態が提供されるものもあります。分類されていない例外をキャッチする場合は、有効範囲の最後のハンドラー上で、SQL 状態に「すべて」を意味するワイルドカード (%) を使用してください。この場合、以前に分類されていなかった例外に新しい SQL 状態が提供されても、引き続き同じ例外の集合がキャッチされます。

以下の SQL 状態が定義済みです。

Dddddd
ddddd は、データベースによって戻される状態です。
SqlState = ‘S22003'
算術オーバーフロー。結果が数値タイプになり、値がサポートされている範囲を超える操作。
SqlState = ‘S22004’
ヌル値を使用できません。ヌル値を使用できない場所にヌル値がありました。
SqlState = ‘S22007’
無効な日時形式。文字から日時タイプへのキャストに使用される文字ストリングの、基本形式が誤っている ('01947-10-24' など) か、値がグレゴリオ暦で使用できる範囲外である ('1947-21-24' など) のどちらかです。
SqlState = ‘S22008’
日時フィールドのオーバーフロー。結果が日時タイプになり、値がサポートされている範囲を超える操作。
SqlState = ‘S22011’
SUBSTRING エラー。FROM および FOR パラメーターの場合、第 1 オペランドの長さと合わせると、SUBSTRING 関数の規則に違反します。
SqlState = ‘S22012’
ゼロ除算。結果のデータ・タイプに無限大の概念がない除算操作に、ゼロの右オペランドがあります。
SqlState = ‘S22015’
インターバル・フィールドのオーバーフロー。結果が INTERVAL タイプになり、値が INTERVAL データ・タイプでサポートされている範囲を超える操作。
SqlState = ‘S22018’
キャストの無効文字値。
SqlState = ‘SPS001’
無効なターゲット・ターミナル。ターミナル・ステートメントに対する PROPAGATE が、無効なターミナル名を使用しようとしました。
SqlState = ‘SPS002’
無効なターゲット・ラベル。ラベル・ステートメントに対する PROPAGATE が、無効なラベルを使用しようとしました。
SqlState = 'MQW001'、SqlNativeError = 0
ビット・ストリームが MQ メッセージの要件と合致しません。キューへの書き込みは試行されませんでした。この問題の解決法として、再試行やキュー管理を行っても成功しません。
SqlState = 'MQW002'、SqlNativeError = 0
ターゲットのキュー名またはキュー・マネージャー名が無効でした (つまり、ユニコードからキュー・マネージャーのコード・ページに変換できませんでした)。この問題の解決法として、再試行したりキューを空にしたりしても成功しません。
SqlState = 'MQW003'、SqlNativeError = 0
要求モードが指定されましたが、"reply to" キュー名またはキュー・マネージャー名が無効でした (つまり、ユニコードからマネージャーのコード・ページに変換できませんでした)。この問題の解決法として、再試行したりキューを空にしたりしても成功しません。
SqlState = 'MQW004'、SqlNativeError = 0
応答モードが指定されましたが、メッセージから取られたキュー名またはキュー・マネージャー名が無効でした (つまり、指定されたコード・ページからユニコードに変換できませんでした)。この問題の解決法として、再試行したりキューを空にしたりしても成功しません。
SqlState = 'MQW005'、SqlNativeError = 0
宛先リスト・モードが指定されましたが、指定された宛先リストが、宛先リストの基本要件に合致していません。キューへのメッセージの書き込みは試行されませんでした。この問題の解決法として、再試行やキュー管理を行っても成功しません。
SqlState = 'MQW101', SqlNativeError = As returned by MQ
ターゲットのキュー・マネージャーまたはキューを開くことができませんでした。この問題の解決法として、キュー管理を行うと成功する可能性がありますが、再試行は成功しません。
SqlState = 'MQW102', SqlNativeError = as returned by MQ
ターゲットのキュー・マネージャーまたはキューに書き込めませんでした。この問題の解決法として、再試行やキュー管理を行うと成功する可能性があります。
SqlState = 'MQW201'、SqlNativeError = エラーのある宛先の数
宛先リストの処理中に複数のエラーが起きました。メッセージがゼロ個以上のキューに書き込まれた可能性があります。この問題の解決法として、再試行やキュー管理を行うと成功する可能性があります。
ユーザーが THROW ステートメント中で使用している例外
上記のいずれかの例外をまねるのではない場合は、ユーザー例外に Uuuuuuu を使用してください。
空ストリング
他のすべてのエラー。
関連概念
メッセージ・フローの概要
ESQL の概要
関連タスク
メッセージ・フローの内容の定義
ESQL の開発
データベース状態のキャプチャー
関連資料
SQLCODE 関数
SQLERRORTEXT 関数
SQLNATIVEERROR 関数
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ak17990_