指定された ODBC データ・ソース内のデータベースと対話するには、Database ノードを使用します。対話の種類は、入力メッセージからデータを指定し、そのデータを何らかの形式に変換して (例えば、計算を実行するなど)、その結果をデータベース表に割り当てるなどの ESQL ステートメントをコーディングすることにより定義します。
プロパティーを設定することにより、データベースに対する更新をすぐにコミットするか、メッセージ・フローが完了するまで更新のコミットを待つか、またはメッセージ・フローの全体的な完了状況に応じてロールバックするかを制御することができます。
このノードを使ってデータベースを更新することは可能ですが、メッセージを更新することはできません。
ワークベンチでは、Database ノードは次のアイコンで表されます。
このノードが使用される方法に関しては、次のサンプルを参照してください。
モニター 20 個の注文を受ける状況を考えてみてください。 ウェアハウスに十分な数のモニターがある場合、在庫データベースから在庫レベルを減らしたいと考えます。 Database ノードを使ってモニターが十分にあることを確認し、データベース内の数量フィールドの値を減らすことができます。
Database ノードのインスタンスをメッセージ・フローに入れると、Database ノードを構成することができます。 エディター・ビューでノードを右クリックし、「プロパティー」をクリックします。ノードの基本プロパティーが表示されます。
値を入力する必要のある (デフォルト値が定義されていない) すべての必須プロパティーには、プロパティー・ダイアログにアスタリスクが表示されます。
以下のように、Database ノードを構成します。
z/OS システムの場合、ブローカーは、ブローカーが開始するタスクの ID を使用するか、または mqsisetdbparms コマンド JCL の、カスタマイズ・データ・セット <hlq>.SBIPPROC の BIPSDBP で指定されたユーザー ID とパスワードを使用します。
表と対話する ESQL ステートメントをコーディングする場合は、それらの表がこのデータベース内に存在することが前提とされます。 存在しない場合には、実行時にブローカーによってデータベース・エラーが生成されます。
Database ノードの動作をカスタマイズするための ESQL ステートメントは、この Database ノードのインスタンスが含まれるメッセージ・フローに関連付けられた ESQL ファイル内にコーディングします。デフォルトで <message_flow_name>.esql という名前を持つこの ESQL ファイルには、ESQL を必要とするメッセージ・フロー内のすべてのノード用の ESQL が含まれています。特定のノードに関連したコードの部分はモジュールと呼ばれます。
このメッセージ・フロー用の ESQL ファイルが存在していない場合、Database ノードを右クリックして、「ESQL のオープン」をクリックします。これにより、ESQL エディター・ビューに新しい ESQL ファイルが作成されてオープンされます。
ファイルが既に存在する場合は、「ステートメント」プロパティーの横にある「ブラウズ」ボタンをクリックします。 「モジュール選択」ダイアログが表示され、このメッセージ・フローで使用可能な ESQL ファイルで定義されている Database ノード・モジュールがリストされます (ESQL ファイルは従属する他のプロジェクトで定義することができます)。 適切なモジュールを選択して、「OK」をクリックします。使用できる適切なモジュールがない場合は、リストは空になります。
指定されたモジュールが存在しない場合、それが作成され、エディターはファイルを表示するために位置付けします。 ファイルとモジュールが既に存在する場合、エディターはファイルを位置付けし、正しいモジュールを強調表示します。
「リソース・ナビゲーター」で適切な ESQL ファイルをオープンし、「アウトライン」ビューでこのノードを選択することもできます。
新規または既存の ESQL ファイル内でこのノード用にモジュール・スケルトンが作成された場合、以下の ESQL が含まれます。この例では、デフォルトのモジュール名が表示されています。
CREATE DATABASE MODULE <flow_name>_Database CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN RETURN TRUE; END; END MODULE;
自分で ESQL モジュールを作成する場合、このスケルトンを正確に作成します。 デフォルトの名前を更新することができますが、指定する名前は、対応するノード・プロパティー「ステートメント」と一致することを確認してください。
このノードをカスタマイズするための ESQL を、BEGIN ステートメントと RETURN TRUE の間に追加します。
をクリックすることにより ESQL ファイルを作成することもできます。
この モジュールでは、SET、WHILE、DECLARE、および IF を含む ESQL ステートメントすべてを 使用できますが、(Compute ノードとは異なり) Database ノードは、入力ターミナルで受信した メッセージを変更せずに出力ターミナルに伝搬します。つまり、Filter ノードと同様に、Database ノードには参照されるメッセージが 1 つしかないということです。
メッセージのどのような部分も変更できないため、割り当てステートメント (INSERT ステートメントの SET 文節ではなく、SET ステートメント) では、一時的な変数への値の割り当てしか行うことができません。 したがって、割り当てステートメントで行えるアクションの有効範囲は限られています。
「リソース・ナビゲーター」で適切な ESQL ファイルをオープンし、「アウトライン」ビューでこのノードを選択することもできます。
このボックスを選択した場合、ノードはデータベースからのすべての正の戻りコードをエラーとして扱い、負の戻りコードについてと同じ方法で例外を生成するか、問題がより重大である場合はエラーを生成します。
このボックスを選択しなかった場合、ノードは警告を通常の戻りコードとして扱い、例外を生成しません。 生成される最も重大な警告は「見つかりません」であり、これはほとんどの環境で正常な戻りコードとして支障なく扱うことができます。
このチェック・ボックスのチェックを外す場合、データベース呼び出しを行うたびに返される可能性のあるデータベース・エラーを 調べるために ESQL を含めます。(これには SQLCODE および SQLSTATE を使うことができます。)エラーが発生した場合、メッセージ・フロー内のエラーを処理してブローカーとデータベースの整合性を確認する必要があります。ブローカーによるデフォルト・エラー処理を呼び出さないように選択してあるため、自分でエラーを処理しない限り、エラーは無視されます。例えば、このノードで例外をスローするために ESQL THROW ステートメントを含めることができます。あるいは、Throw ノードを使用して後で独自の例外を生成することができます。
「キャンセル」をクリックすると、ダイアログを閉じてプロパティーに対して行った変更をすべて破棄します。
Database ノードのターミナルについては、次の表に説明されています。
ターミナル | 説明 |
---|---|
In | ノードが処理するメッセージを受け入れる入力ターミナル。 |
Failure | 計算時に障害が検出された場合、入力メッセージが伝搬される出力ターミナル。 「警告をエラーとして扱う」を選択した場合、処理が正常に完了してもメッセージはノードからこのターミナルに伝搬されます。 |
Out | ノードでの処理が終了した時に、変換されたメッセージがルーティングされる出力ターミナル。 変換されたメッセージは、PROPAGATE ステートメントによってこのターミナルにルーティングされる場合もあります。 |
Out1 | 変換されたメッセージが PROPAGATE ステートメントによってルーティングされる第 1 の代替出力ターミナル。 |
Out2 | 変換されたメッセージが PROPAGATE ステートメントによってルーティングされる第 2 の代替出力ターミナル。 |
Out3 | 変換されたメッセージが PROPAGATE ステートメントによってルーティングされる第 3 の代替出力ターミナル。 |
Out4 | 変換されたメッセージが PROPAGATE ステートメントによってルーティングされる第 4 の代替出力ターミナル。 |
以下の表でノードのプロパティーを説明します。M の見出しの列は、プロパティーが必須 かどうかを示します (デフォルトが定義されていない場合に値を入力することが必要なら、プロパティー・ダイアログにアスタリスクのマークが付きます)。 C の見出しの列は、プロパティーが構成可能 かどうかを示します (メッセージ・フローを bar ファイルに追加してデプロイするとき、値を変更できます)。
Database ノードの「基本」プロパティーについては、次の表に説明されています。
プロパティー | M | C | デフォルト | 説明 |
---|---|---|---|---|
データ・ソース | いいえ | はい | このノードに関連付けられた ESQL (「ステートメント」プロパティーで識別される) で参照する表が存在するデータベースの ODBC データ・ソース名。 | |
ステートメント | はい | いいえ | データベース | データベースに対して実行されるステートメントを含む、ESQL ファイル内のモジュールの名前。 |
トランザクション | はい | いいえ | 自動 | ノードのトランザクション・モードです。「自動」または「コミット」を選択できます。 |
警告をエラーとして扱う | はい | いいえ | 選択されていない | データベース SQL 警告をエラーとして扱います。 チェック・ボックスを選択すると、このアクションが実行されます。 |
データベース・エラーで例外をスローする | はい | いいえ | 選択されている | データベース・エラーによりブローカーは例外をスローします。 チェック・ボックスを選択すると、このアクションが実行されます。 |
Database ノードの説明プロパティーについては、次の表に説明されています。
プロパティー | M | C | デフォルト | 説明 |
---|---|---|---|---|
簡略説明 | いいえ | いいえ | ノードの簡単な説明 | |
詳細説明 | いいえ | いいえ | メッセージ・フロー内のノードの目的を説明するテキスト |