PASSTHRU ステートメント

PASSTHRU は、次のような ESQL ステートメントを作成する場合に使います。
  • WebSphere Business Integration Message Broker Parser を使用しない
  • 構成済みのバックエンド・データベースに直接アクセスする
  • コード化ステートメントを実行する
PASSTHRU は、ステートメントとしても関数としても使用できます。

PASSTHRU の 1 番目のパラメーターは、 ご使用のデータベース構文を含む有効な ESQL 式でなければなりません。 PASSTHRU では、ESQL が一般にサポートしていないデータベース構文を使うことができます。

PASSTHRU 関数の振る舞いは、パラメーターを 1 つ、2 つ、 あるいはそれ以上渡すかどうかによって異なります。 PASSTHRU 関数の 1 番目のパラメーターは、 常にストリングまたは評価結果がストリングになる ESQL 式である必要があります。 パラメーターの置換が必要なところを示すには、ストリングの中で疑問符を使用します。

他のパラメーターを 1 つだけ渡す場合は、 そのパラメーターの評価結果は次のいずれかになります。
  • 単一スカラー値。 この場合は 1 番目のパラメーター・マーカーに挿入されます。
  • 値のリスト。 この場合は、ストリング内の各パラメーター・マーカーにリスト項目が順番に挿入されます。

他のパラメーターを 2 つ以上渡す場合は、 各パラメーターはステートメント・ストリングの中の対応する疑問符に結び付けられます。 つまり、1 番目のパラメーターは 1 番目の疑問に結び付けられ、 2 番目のパラメーターは 2 番目の疑問符に結び付けられ、順次同様になります。

疑問符 (?) は、DBMS により準備済み SQL ステートメント内のパラメーター・マーカーとして処理されます。 DBMS の関数に値を渡す場合、パラメーター・マーカーを適切なタイプとして使用しなければなりません。 たとえば、DB2 において、 パラメーター・マーカーは次のようにキャストされます。
SET OutputRoot.XML.Result.Data[] = 
        PASSTHRU('SELECT * FROM user1.stocktable 
        where time=TIMESTAMP(CAST(? as TIMESTAMP)),'1999-12-31-23.59.59.999999');
PASSTHRU ステートメントのいろいろな使い方の例を次に示します。
SET OutputRoot.XML.Result.Data[] = 
                    PASSTHRU('SELECT * FROM user1.stocktable');
PASSTHRU('DELETE FROM user2.AccountData WHERE AccountId =
           ?', InputBody.Data.Account.Id);
SET OutputRoot.XML.Result.Data
    = PASSTHRU('SELECT AccountNum FROM user2.AccountData
    WHERE AccountId = ?', InputBody.Data.Account.Id);
SET OutputRoot.XML.Result.Data[]
    = PASSTHRU('SELECT AccountNum FROM user2.AccountData
                            WHERE AccountId IN (? , ? , ?)',
InputBody.Data.Account.Id[]);
PASSTHRU('INSERT INTO user1.stocktable (stock_id, quantity)
                  values (?, ?)', InputBody.Transaction.Id, 
                           InputBody.Transaction.Quantity);

PASSTHRU でのドラッグ・アンド・ドロップの使用

ESQL を作成するためにドラッグ・アンド・ドロップを使用する場合で、 しかも PASSTHRU ステートメントに ESQL ステートメント全体が入っている場合は、 適用される ESQL ステートメントを引用符で囲む必要があります。以下に例を示します。
PASSTHRU('INSERT INTO user1.stocktable VALUES (1)');
ただし、変数を設定しておいて、それを PASSTHRU ステートメントで参照する場合は、 引用符は省略します。以下に例を示します。
SET myVar = 'SELECT * FROM user1.stocktable';
SET OutputRoot.XML.Data[] = PASSTHRU(myVar);

ストアード・プロシージャーを呼び出すときの考慮事項

PASSTHRU ステートメントを使用してストアード・プロシージャーを呼び出すときは、 次のことに注意してください。
  • WebSphere Business Integration Message Broker では、データベースへの接続に Open Database Connectivity (ODBC) を使用します。ODBC Version 1 では、 次の ODBC エスケープ・シーケンスを使うストアード・プロシージャー呼び出しをサポートしています。
    call procedure-name [([parameter][,[parameter]]...)]}

    WebSphere Business Integration Message Broker の PASSTHRU 関数の入力パラメーターとしては、 上記のエスケープ・シーケンスのみがサポートされています。

  • ESQL CALL ステートメントを使用すると、 データベース・ストアード・プロシージャーを呼び出せます。 このプロシージャーは、インライン ESQL ステートメントのシーケンスが実行されているかのように動作します。
  • ストアード・プロシージャーは次のいずれかの状態で存在しています。
    • 個別に (DB2 および Oracle の両方でサポート)。この場合、次のようなコードになります。
      PASSTHRU('{call proc_insert_comp(?,?)}',InputBody.Test.Company,InputBody.Test.Price);
    • パッケージ・メカニズム (Oracle がサポート) を使用してアクセスされる集合の一部として。 この場合、次のようなコードになります。
      PASSTHRU('{call share_management.add_share(?,?)}',
                         InputBody.Test.Company,InputBody.Test.Price); 
  • ストアード・プロシージャーは次のいずれかになります。
    Noncommittal
    プロシージャー・ロジックは、 明示的なコミットおよびロールバック・アクションを取りません (DB2 と Oracle の両方でサポート)。

    メッセージ・フローがコミットまたはロールバックされると、データベース操作もコミットまたはロールバックされます。 この動作は、トランザクション・プロパティーが自動に設定されている Database ノードおよび Warehouse ノードの動作と一貫性があります。

    Committal
    プロシージャー・ロジックには、 明示的なコミットおよびロールバック・アクションが含まれます (Oracle でサポートされる)。

    メッセージ・フローのロールバックされる場合でも、データベース操作はコミットされます。 この動作は、コミットのトランザクション・プロパティーを持つ Database ノードおよび Warehouse ノードの動作と一貫性があります。

    整合トランザクションの詳細については、 整合されたメッセージ・フローの構成を参照してください。

    メッセージ・フローがロールバックされる場合、 committal または noncommittal でのストアード・プロシージャー呼び出しは、 いずれのデータベース操作 (および後続の結果) にも作用します。

制限事項

PASSTHRU を使用してストアード・プロシージャーを呼び出すときには、 いくつかの制限事項があります。 制限事項を例示するために、次の例を考えてみます。
PASSTHRU('{call proc_delete_comp(?)}',InputBody.Test.Company);
  1. WebSphere Business Integration Message Broker は、入力パラメーターのみをサポートしています。
  2. WebSphere Business Integration Message Broker では、結果セットを検索するために SqlMoreResults を使用することはできません。

関連概念
ESQL

関連タスク
ESQL の開発
ストアード・プロシージャーの呼び出し

関連資料
CALL ステートメント
CREATE PROCEDURE ステートメント