Oracle データベース アダプターを使用すると、クライアントは Oracle データベースでパラメーター化された SQL ステートメントを実行できます。 このような操作をサポートするために、Oracle Database アダプターは SQLEXECUTE 操作を表示します。 SQLEXECUTE 操作では、各セットに対して同じ SQL ステートメントを 1 回実行できるパラメーター セットで構成される入力パラメーター ブロックがサポートされています。 SQLEXECUTE 操作は、汎用レコード セット内の SQL ステートメントの結果を返します。 操作の詳細については、「 Oracle Database での SQLEXECUTE 操作」を参照してください。 SQLEXECUTE 操作の SOAP メッセージの構造については、「SQLEXECUTE 操作 のメッセージ スキーマ」を参照してください。
Oracle データベースに対して SQLEXECUTE 操作を実行する方法
BizTalk Server で Oracle データベース アダプターを使用して Oracle データベースに対する操作を実行するには、「Oracle Database を使用して BizTalk アプリケーションを開発するための構成要素」で説明されている手順を実行します。 SQLEXECUTE 操作を実行するには、次のタスクを実行します。
BizTalk プロジェクトを作成し、SQLEXECUTE 操作のスキーマを生成します。 SQLEXECUTE 操作は、アダプター サービス BizTalk プロジェクト アドインの [ カテゴリの選択 ] ウィンドウのルート ノード (/) の下に表示されます。
Oracle データベースからメッセージを送受信するためのメッセージを BizTalk プロジェクトに作成します。
Oracle データベース テーブルまたはビューで操作を呼び出すオーケストレーションを作成します。
BizTalk プロジェクトをビルドして展開します。
物理送受信ポートを作成して BizTalk アプリケーションを構成します。
BizTalk アプリケーションを起動します。
このトピックでは、これらのタスクを実行する手順について説明します。
このトピックに基づくサンプル
このトピックに基づくサンプル SqlExec は、BizTalk アダプター パックでも提供されています。 詳細については、「 アダプターのサンプル」を参照してください。
スキーマの生成
このトピックでは、パラメーター化された SQL クエリを実行する方法を示すために、アダプター サービス アドインの [ カテゴリの選択 ] ウィンドウのルート ノード (/) で使用できる SQLEXECUTE 操作のスキーマを生成します。 スキーマの生成方法の詳細については、 Visual Studio での Oracle Database 操作のメタデータの取得 に関するページを参照してください。
メッセージとメッセージの種類の定義
前に生成したスキーマでは、オーケストレーション内のメッセージに必要な "型" が記述されています。 通常、メッセージは変数であり、対応するスキーマによって定義される型です。 最初の手順で生成したスキーマを、BizTalk プロジェクトの [オーケストレーション ビュー] ウィンドウのメッセージにリンクする必要があります。
このトピックでは、2 つのメッセージを作成する必要があります。1 つは Oracle データベースに要求を送信し、もう 1 つは応答を受信するメッセージです。
メッセージを作成し、スキーマにリンクするには、次の手順を実行します。
メッセージを作成し、スキーマにリンクするには
まだ開いていない場合は、BizTalk プロジェクトの [オーケストレーション ビュー] ウィンドウを開きます。 これを行うには、[ 表示] をクリックし、[ その他のウィンドウ] をポイントし、[ オーケストレーション ビュー] をクリックします。
オーケストレーション ビューで、[ メッセージ] を右クリックし、[ 新しいメッセージ] をクリックします。
新しく作成したメッセージを右クリックし、[ プロパティ ウィンドウ] を選択します。
Message_1の [プロパティ] ウィンドウで、次の操作を行います。
これを使用する 目的 識別子 「要求」を入力してください。 メッセージの種類 ドロップダウン リストから [ スキーマ] を展開し、 SqlExec.OracleDBBindingSchema.SQLEXECUTE ( SqlExec は BizTalk プロジェクトの名前) を選択します。 OracleDBBindingSchema は、SQLEXECUTE 操作用に生成されるスキーマです。 手順 2. を繰り返して、新しいメッセージを作成します。 新しいメッセージの [プロパティ ] ウィンドウで、次の操作を行います。
これを使用する 目的 識別子 「 応答」と入力します。 メッセージの種類 ドロップダウン リストから [ スキーマ] を展開し、[ SqlExec.OracleDBBindingSchema.SQLEXECUTEResponse] を選択します。
オーケストレーションの設定
SQLEXECUTE 操作を使用してパラメーター化された SQL クエリを実行するために BizTalk Server を使用するには、BizTalk オーケストレーションを作成する必要があります。 このオーケストレーションでは、定義された受信場所に要求メッセージをドロップします。 Oracle データベース アダプターはこのメッセージを使用し、ODP 経由で Oracle データベースに渡します。 Oracle データベースからの応答は、別の場所に保存されます。 Oracle データベースで SQLEXECUTE 操作を実行するための一般的なオーケストレーションには、次のものが含まれます。
Oracle データベースにメッセージを送信し、応答を受信する図形を送受信します。
Oracle データベースに送信する要求メッセージを受信する一方向の受信ポート。
Oracle データベースに要求メッセージを送信し、応答を受信する双方向送信ポート。
Oracle データベースからフォルダーに応答を送信する一方向の送信ポート。
SQLEXECUTE 操作のサンプル オーケストレーションは、次のようになります。
メッセージ図形の追加
メッセージ図形ごとに次のプロパティを指定してください。 [図形] 列に一覧表示される名前は、先ほど説明したオーケストレーションに表示されるメッセージ図形の名前です。
形 | 図形の種類 | 特性 |
---|---|---|
メッセージを受信する | 受け取る | - 名前を ReceiveMessage に設定する - アクティブ化を True に設定する |
メッセージを送信 | 送信 | - 名前を SendMessage に設定する |
レスポンスを受け取る | 受け取る | - 名前を ReceiveResponse に設定する - アクティブ化を False に設定する |
SendResponse | 送信 | - 名前を SendResponse に設定する |
ポートの追加
論理ポートごとに次のプロパティを指定してください。 [ポート] 列に表示される名前は、オーケストレーションに表示されるポートの名前です。
港 / ポート | 特性 |
---|---|
ファイルイン | - 識別子を FileIn に設定する - 型を FileInType に設定する - 通信パターンを一方向に設定する - 通信方向を受信に設定する |
LOBPort | - 識別子を LOBPort に設定する - 型を LOBPortType に設定する - 通信パターンを Request-Response に設定する - 通信方向を送受信に設定する |
応答を保存 | - 識別子を SaveResponse に設定する - 型を SaveResponseType に設定する - 通信パターンを一方向に設定する - 通信方向を送信に設定する |
アクション図形のメッセージを指定し、ポートに接続する
次の表では、アクション図形のメッセージを指定し、メッセージをポートにリンクするために設定するプロパティとその値を指定します。 [図形] 列に表示される名前は、前述のオーケストレーションに表示されるメッセージ図形の名前です。
形 | 特性 |
---|---|
メッセージを受信する | - メッセージを要求に設定する - 操作を FileIn.SQLEXECUTE.Request に設定する |
メッセージを送信 | - メッセージを要求に設定する - 操作を LOBPort.SQLEXECUTE.Request に設定する |
レスポンスを受け取る | - メッセージを応答に設定する - 操作を LOBPort.SQLEXECUTE.Response に設定する |
SendResponse | - メッセージを応答に設定する - SaveResponse.SQLEXECUTE.Request に操作を設定する |
これらのプロパティを指定すると、メッセージの図形とポートが接続され、オーケストレーションが完了します。
BizTalk ソリューションをビルドし、BizTalk Server に展開する必要があります。 詳細については、「オーケストレーションの ビルドと実行」を参照してください。
BizTalk アプリケーションの構成
BizTalk プロジェクトを展開すると、前に作成したオーケストレーションが BizTalk Server 管理コンソールの [ オーケストレーション ] ウィンドウの下に一覧表示されます。 BizTalk Server 管理コンソールを使用してアプリケーションを構成する必要があります。 チュートリアルについては、「 チュートリアル: 基本的な BizTalk アプリケーションの展開」を参照してください。
アプリケーションの構成には、次の作業が含まれます。
アプリケーションのホストの選択。
オーケストレーションで作成したポートを BizTalk Server 管理コンソールの物理ポートにマッピングします。 このオーケストレーションでは、次の操作を行う必要があります。
ハード ディスク上の場所と、要求メッセージをドロップする対応するファイル ポートを定義します。 BizTalk オーケストレーションは、要求メッセージを使用して Oracle データベースに送信します。
ハード ディスク上の場所と、BizTalk オーケストレーションが Oracle データベースからの応答を含む応答メッセージを削除する対応するファイル ポートを定義します。
Oracle データベースにメッセージを送信する物理 WCF-Custom または送信ポート WCF-OracleDB 定義します。 また、送信ポートでアクションを指定する必要があります。 WCF-Custom または WCF-OracleDB ポートを作成する方法については、「 Oracle データベース アダプターへの物理ポート バインドを手動で構成する」を参照してください。
注
また、Consume Adapter Service BizTalk Project アドインを使用してスキーマを生成すると、それらのポートに設定するポートとアクションに関する情報を含むバインディング ファイルも作成されます。 BizTalk Server 管理コンソールからこのバインド ファイルをインポートして、送信ポート (発信呼び出し用) または受信ポート (受信呼び出し用) を作成できます。 詳細については、「 Oracle Database へのポート バインド ファイルを使用して物理ポート バインドを構成する」を参照してください。
アプリケーションの起動
SQLEXECUTE 操作を実行するには、BizTalk アプリケーションを起動する必要があります。 BizTalk アプリケーションを起動する手順については、「オーケストレーションを 開始する方法」を参照してください。
この段階で、次のことを確認します。
オーケストレーションの要求メッセージを受信する FILE 受信ポートが実行されています。
オーケストレーションからの応答メッセージを受信する FILE 送信ポートが実行中です。
Oracle データベースにメッセージを送信する WCF-Custom または WCF-OracleDB 送信ポートが実行されています。
操作の BizTalk オーケストレーションが実行されています。
操作の実行
アプリケーションを実行した後、FILE 受信場所に要求メッセージをドロップする必要があります。 要求メッセージのスキーマは、前に生成した SQLEXECUTE 操作のスキーマに準拠している必要があります。 オーケストレーションがメッセージを処理して、Oracle データベースに送信します。 Oracle データベースからの応答は、オーケストレーションの一部として定義されている他の FILE の場所に保存されます。 SQLEXECUTE 操作を呼び出すための要求メッセージ スキーマの詳細については、SQLEXECUTE 操作のメッセージ スキーマを参照してください。
SQLEXECUTE 操作は Oracle データベース成果物の下に表示されないため、同じスキーマを使用して、ビューに対してパラメーター化された SQL クエリを実行したり、他のテーブルで動作するプロシージャを実行したりできます。
たとえば、次の要求メッセージは、SQLEXECUTE 操作を使用して、ACCOUNT テーブルに対してパラメーター化された SELECT ステートメントを実行します。 ACCOUNT テーブルは、サンプルで提供されている SQL スクリプトを実行して SCOTT スキーマの下に作成されます。 サンプルの詳細については、「 スキーマサンプル」を参照してください。
<SQLEXECUTE xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SQLEXECUTE">
<SQLSTATEMENT>select * from ACCOUNT where ACCTID=:num</SQLSTATEMENT>
<PARAMETERSCHEMA>num number</PARAMETERSCHEMA>
<PARAMETERSET>
<PARAMETERDATA xmlns="http://Microsoft.LobServices.OracleDB/2007/03">
<PARAMETER>
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">100000</string>
</PARAMETER>
</PARAMETERDATA>
</PARAMETERSET>
</SQLEXECUTE>
上記の要求メッセージに対する Oracle データベースからの応答は次のとおりです。
<?xml version="1.0" encoding="utf-8" ?>
<SQLEXECUTEResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SQLEXECUTE">
<SQLEXECUTEResult>
<GenRecordRow xmlns="http://Microsoft.LobServices.OracleDB/2007/03">
<GenRecordColumn>
<GenRecordColumn>
<ColumnName>ACCTID</ColumnName>
<ColumnValue>100000</ColumnValue>
<ColumnType>System.Decimal</ColumnType>
</GenRecordColumn>
<GenRecordColumn>
<ColumnName>NAME</ColumnName>
<ColumnValue>Kim Ralls</ColumnValue>
<ColumnType>System.String</ColumnType>
</GenRecordColumn>
<GenRecordColumn>
<ColumnName>BALANCE</ColumnName>
<ColumnValue>10000</ColumnValue>
<ColumnType>System.Decimal</ColumnType>
</GenRecordColumn>
</GenRecordColumn>
</GenRecordRow>
</SQLEXECUTEResult>
</SQLEXECUTEResponse>
考えられる例外
BizTalk Server を使用した DML 操作の実行中に発生する可能性がある例外については、「 例外とエラー処理」を参照してください。
ベスト プラクティス
BizTalk プロジェクトを展開して構成したら、構成設定をバインド ファイルと呼ばれる XML ファイルにエクスポートできます。 バインド ファイルを生成したら、同じオーケストレーションの送信ポートや受信ポートなどを作成する必要がないように、ファイルから構成設定をインポートできます。 バインド ファイルの詳細については、「 Oracle Database アダプターバインドの再利用」を参照してください。