ESQL には、データベースにアクセスするためのステートメントと関数が多数あります。
Compute、Database、および Filter ノードからユーザー・データベースにアクセスできます。
注: これらのノードのデータベース・アクセス機能の間に違いはありません。これまでの経緯に基づく名前もあれば、標準的な使用法に基づく名前もあります。
データベース内のデータを使用してメッセージを更新または作成したり、メッセージ内のデータを使用してデータベース内のデータを更新または作成することができます。
以下の点に注意してください。
- ESQL データベース・ステートメントまたは関数を使用するノードの "data source" 属性は、データベースの名前 (つまり ODBC DSN) を使用して設定されていなければなりません。このデータベースはアクセス可能かつ操作可能でなければならず、ブローカーから接続できなければなりません。
- 同じノードからアクセスされるすべてのデータベースは、ノードの data source 属性で指定されたデータベースと同じ OBDC 機能を持っている必要があります。これらのデータベースのタイプ (たとえば DB2 または Oracle)、レベル (たとえばリリース 8.1 CSD3)、およびプラットフォームが同じ場合には、この要件は常に満たされます。それ以外のデータベースを組み合わせた場合、同じ OBDC 機能を持つかどうか保証されません。ノードの data source 属性で指定されたデータベースと同じ OBDC 機能を持たないデータベースに対してノードがアクセスを試行すると、ブローカーはエラー・メッセージを出します。
- 1 つの SELECT FROM 文節で参照されているすべての表は、同じデータベース中になければなりません。
ブローカーが稼働しているシステムに適切な ODBC データ・ソースが作成されていることを確認しなければなりません。mqsisetdbparms コマンドを使用して特定のデータベースのユーザー ID とパスワードを設定した場合、ブローカーはこれらの値を使用してデータベースに接続します。ユーザー ID とパスワードを設定していない場合、mqsicreatebroker コマンドで指定した (しかも後続の mqsichangebroker コマンドで変更した) デフォルトのデータベース・ユーザー ID とパスワードをブローカーは使用します。
z/OS システムの場合:
- ブローカーは、ブローカーが開始したタスクの ID を使用してデータベースに接続します。
- カスタマイズ・データ・セット <hlq>.SBIPPROC 中の JCL メンバー BIPSDBP を使用して、mqsisetdbparms コマンドを実行します。
データベース・ユーザー ID に、フローで必要な操作を実行できるだけの特権があることも確認しなければなりません。特権がない場合、実行時にエラーが起きます。
"データベース・エラーで例外をスロー" 属性と "警告をエラーとして扱う" 属性を「はい」に設定し、"トランザクション" 属性を「自動」に設定すると柔軟性を最大にすることができるので、この設定をお勧めします。設定後、COMMIT ステートメントと ROLLBACK ステートメントを使用して、トランザクション制御およびハンドラーによりエラーを処理できます。