Flex Gateway新着情報
Governance新着情報
Monitoring API Managerデータベース用 Anypoint Connector (Database Connector) の例は、データベース接続の設定、データベースの照会、ストアドプロシージャーの実行、DDL ステートメントの実行、スクリプトの実行、データベーストランザクションの実行、一括操作の使用、カスタムデータ型の設定に役立ちます。
データベース接続の設定
一般的なデータベースと汎用データベースの両方に接続します。また、グローバルデータソースへの接続、JDBC ドライバーの設定、接続プーリングの設定、TNS を使用した Oracle データベースへの接続を行うようにコネクタを設定します。
データベースの照会
データベースからデータを照会する Select 操作を設定します。
データベースからの単一レコードのクエリ
MySQL データベースのテーブルから本の情報を取得する Query single 操作を Mule アプリケーション内で設定します。
データの挿入、更新、削除
データを管理するように Insert、Update、Delete 操作を設定します。
ストアドプロシージャーの実行
input
、output
、および input-output
パラメーターを組み合わせる Stored Procedure 操作を設定します。また、ストアドプロシージャーの日付を設定します。
UDT を使用する Oracle ストアドプロシージャーのコール
UDT を入力および出力パラメーターとして使用する Oracle データベースストアドプロシージャーをコールする Stored procedure 操作を設定します。また、createStruct
および createArray
DataWeave 関数を使用してアプリケーションデータをカスタム型にマップします。
DDL ステートメントの実行
テーブルや他のデータ構造内のデータを作成または変更する DDL ステートメントを実行する Execute DDL 操作を設定します。
一括操作の実行
各入力パラメーターが 1 つの値のみを取る場合に使用する Bulk insert、Bulk update、Bulk delete 操作を設定します。
スクリプトの実行
スクリプトを 1 つのステートメントとして実行する Execute script 操作を設定します。
データベースのデータ型の設定
特定の接続プロバイダーに接続している場合に使用するカスタムデータ型を設定します。
データベーストランザクションの設定
データベース操作をトランザクションのコンテキストで実行します。
insert
、update
、delete
操作は、各入力パラメーターが 1 つの値のみを取る場合に使用できます。または、一括操作では、一連のパラメーター値を使用して 1 つのクエリを実行できます。
一括操作を実行すれば、不要なステップを回避して次の利点を得ることができます。
クエリは 1 回のみ解析される。
実行されるステートメントは 1 つのみのため、必要なデータベース接続は 1 つのみである。
ネットワークオーバーヘッドが最小限に抑えられる。
RDBMS は一括操作をアトミックに実行できる。
このユースケースでは、コネクタは <db:bulk-insert>
、<db:bulk-update>
、<db:bulk-delete>
の 3 つの操作を提供します。
これらの操作は、対応する単一操作と似ていますが、入力パラメーターをキー - 値のペアで受け取るのではなく、キー - 値のペアのリストとして受け取ることを想定しています。
次に例を示します。
<db:bulk-insert config-ref="dbConfig" >
<db:bulk-input-parameters>
#[[{'id': 2, 'name': 'George', 'lastName': 'Costanza'}, {'id': 3, 'name': 'Cosmo', 'lastName': 'Kramer'}]]
</db:bulk-input-parameters>
<db:sql>
insert into customers (id, name, lastName) values (:id, :name, :lastName)
</db:sql>
</db:bulk-insert>
一括操作を使用しない場合、delete
操作の実行時に 1 つの条件 (POSITION = X)
のみが提供されると、複数の行が条件に一致して削除される可能性があります。
同じ概念が更新にも適用されます。UPDATE PRODUCTS set PRICE = PRICE * 0.9 where PRICE > :price
を使用するときに、複数の商品に 10% 割引を適用したい場合でも、price
入力パラメーターは 1 つの値のみを受け入れます。
価格の異なる商品に異なる割引率を適用するには、多くの操作を実行します。
次の例は、構造 { price : number, discountRate: number}
のオブジェクトのリストであるペイロードです。
<foreach>
<db:update config-ref="dbConfig">
<db:input-parameters>
#[
{
'discountRate' : payload.discountRate,
'price' : payload.price,
}
]
</db:input-parameters>
<db:sql>
UPDATE PRODUCTS set PRICE = PRICE * :discountRate where PRICE > :price
</db:sql>
</db:update>
</foreach>
前の操作ではタスクを遂行できますが、非効率的です。リストの要素ごとに、操作の各要素で 1 つのクエリを実行する必要があります。
クエリが解析される。
パラメーターが解決される。
データベースへの接続が取得される (プールから接続を取得するか、新しい接続を確立する)。
すべてのネットワークオーバーヘッドが支払われる。
RBMS でクエリを処理し、変更を適用する。
接続が解放される。
いずれかの操作の実行中にエラーが発生した場合 (たとえば、100 行の一括挿入のうち 1 行の挿入に失敗した場合)、1 つの例外がスローされます。
一括操作の一部のステートメントは正常に実行できても、他のステートメントはエラーになる可能性があります。この場合、ドライバーが次のいずれかを実行します。
実行をすぐに停止し、残りのすべての操作を無視する
残りのステートメントの実行を続行する。
どちらの場合も、エラーが発生するたびにアプリケーションログを調べて、失敗の原因を確認できます。この場合、問題の原因を説明する 1 つの例外がスローされます。