WebSphere Message Broker バージョン 8.0.0.5 オペレーティング・システム: AIX、HP-Itanium、Linux、Solaris、Windows、z/OS

製品の最新バージョンについては、IBM Integration Bus バージョン 9.0 をご覧ください。

SQLSTATE 関数

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

構文

構文図を読む構文図をスキップする
>>-SQLSTATE----------------------------------------------------><

メッセージ・フロー内で、外部データベース・リソースにアクセスしたり、これを更新することができます。これは、ComputeDatabase、および Filter ノードで使用可能な 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 状態を使用してください。 先頭が文字『U』の SQL 状態を使用する場合、LIKE'U%' 演算子を使用して、ユーザー定義例外とユーザーがスローした例外をすべて突き合わせるためのエラー・ハンドラーを作成できます。
  3. メッセージ・トランスポートまたは ESQL のインプリメンテーション自体が発生元の例外を選択した場合は、SQL コード、状態、ネイティブ・エラー、およびエラー・テキストは、このセクションで後ほど取り上げられているリストに記述されているものになります。
  4. 他のすべての例外の場合は、SQL 状態は '' になり、これは発生元、クラス、およびサブクラスがないことを示します。

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

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

Dddddd
ddddd は、データベースによって戻される状態です。
SqlState = 'S22003'
算術オーバーフロー。 結果が数値タイプになり、値がサポートされている範囲を超える操作。
SqlState = 'S22007'
日時形式が無効です。 文字から日時タイプへのキャストに使用される文字ストリングの、基本形式が誤っている ('01947-10-24' など) か、値がグレゴリオ暦で使用できる範囲外である ('1947-21-24' など) のどちらかです。
SqlState = 'S22008'
日時フィールドのオーバーフロー。 結果が日時タイプになり、値がサポートされている範囲を超える操作。
SqlState = 'S22012'
ゼロ除算。 結果のデータ・タイプに無限大の概念がない除算操作に、ゼロの右オペランドがあります。
SqlState = 'S22015'
インターバル・フィールドのオーバーフロー。 結果が INTERVAL タイプになり、値が INTERVAL データ・タイプでサポートされている範囲を超える操作。
SqlState = 'S22018'
cast の文字値が無効です。
SqlState = 'SFN001'
IN 述部で使用した SELECT 関数から複数の列が返されましたが、この場合は 1 つの列だけが有効です。
SqlState = 'SPS001'
ターゲット・ターミナルが無効です。 ターミナル・ステートメントに対する PROPAGATE が、無効なターミナル名を使用しようとしました。
SqlState = 'SPS002'
ターゲット・ラベルが無効です。 ラベル・ステートメントに対する PROPAGATE が、無効なラベルを使用しようとしました。
SqlState = 'SPS003'
PROPAGATE ステートメントは、このコンテキストでは無効です。 代わりに RETURN 関数を使用してください。
SqlState = 'MQW001'、SqlNativeError = 0
ビット・ストリームが WebSphere® MQ メッセージの要件と合致しません。 キューへの書き込みは試行されませんでした。 この問題は、再試行やキュー管理では解決しません。
SqlState = 'MQW002'、SqlNativeError = 0
ターゲットのキュー名またはキュー・マネージャー名が無効でした (つまり、ユニコードからキュー・マネージャーのコード・ページに変換できませんでした)。 この問題は、再試行やキューを空にすることによっては解決しません。
SqlState = 'MQW003'、SqlNativeError = 0
要求モードが指定されましたが、『reply to』キュー名またはキュー・マネージャー名が無効でした (つまり、ユニコードからマネージャーのコード・ページに変換できませんでした)。 この問題は、再試行やキューを空にすることによっては解決しません。
SqlState = 'MQW004'、SqlNativeError = 0
応答モードが指定されましたが、メッセージから取られたキュー名またはキュー・マネージャー名が無効でした (つまり、指定されたコード・ページからユニコードに変換できませんでした)。 この問題は、再試行やキューを空にすることによっては解決しません。
SqlState = 'MQW005'、SqlNativeError = 0
宛先リスト・モードが指定されましたが、指定された宛先リストが、宛先リストの基本要件に合致していません。 キューへのメッセージの書き込みは試行されませんでした。 この問題は、再試行やキュー管理では解決しません。
SqlState = 'MQW101', SqlNativeError = returned by WebSphere MQ
ターゲットのキュー・マネージャーまたはキューを開くことができませんでした。 この問題はキュー管理によって解決する可能性がありますが、再試行によっては解決しません。
SqlState = 'MQW102', SqlNativeError = returned by WebSphere MQ
ターゲットのキュー・マネージャーまたはキューに書き込めませんでした。 この問題は、再試行およびキュー管理によって解決する可能性があります。
SqlState = 'MQW201'、SqlNativeError = エラーのある宛先の数
宛先リストの処理中に複数のエラーが起きました。メッセージがゼロ個以上のキューに書き込まれた可能性があります。 この問題は、再試行およびキュー管理によって解決する可能性があります。
ユーザーが THROW ステートメント中で使用している例外
上記のいずれかの例外をまねるのではない場合は、ユーザー例外に Uuuuuuu を使用してください。
空ストリング
他のすべてのエラー。
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        最終更新:
        
        最終更新: 2015-02-28 17:47:32


参照トピック参照トピック | バージョン 8.0.0.5 | ak17990_