0

私たちのバッチ プロジェクトでは、シェル スクリプトを実行し、それが次に Web サービスを呼び出します。私たちの要件は、DB 2 データベースで選択クエリを実行し、たとえば 1000 の A_TYPE アカウントを取得することです。次に、これらのアカウントを使用してリストを取得する必要があります。 ORACLE DB からの準備済みステートメントで A_TYPE アカウントを使用することによる、他のアカウント (A_TYPE、B_TYPE 列) の。

問題は、1000 個の A_TYPE アカウントごとに、ステートメントを 1000 回準備し、それを 1000 回実行して B_TYPE アカウントを取得する必要があることです。時間がかかり、あまり効率的ではありません。

したがって、誰かが A_TYPE アカウントのリストまたは配列を渡し、A_TYPE、B_TYPE アカウントのリストまたはハッシュマップを取得して、それらをさらに使用できるようにする方法を提案できれば、非常に役に立ちます。また、A_TYPE アカウントの代わりに B_TYPE アカウントを使用して Db2 DB を更新する必要があります。私のロジックはすべて、Web サービス操作 (JAVA) 自体に記述されています。

アップデート:

はい、JNDI 名を使用して DB に直接アクセスしています。Web サービス ハンドラー ロジックでは、両方の DB を呼び出します。JNDI 名を使用してアクセスするため、使用されている DB2 のバージョンはわかりません。Oracle は 10 gi のようなクエリを持っています。

SELECT A_TYPE account from ADB2 TABLE based on  conditions (?,?) FETCH 1000 records  only"` and `SELECT A_TYPE_Account,B_TYPE_Account from ORACLE_TABLE where A_TYPE_Account='?(A_TYPE)'

いいえ、トランザクションについて心配する必要はありません。ホスト変数と DB2 動的クエリについてはわかりません。

4

1 に答える 1

0

このOracle <--> DB2関連の作業を頻繁に行うと仮定して、取得を検討してください
- Oracle Transparent Gateway for DRDA http://www.oracle.com/technetwork/database/gateways/index.html
- IBM Infosphere Federation Server
http:// www-03.ibm.com/software/products/en/ibminfofedeserv/

DB2 Advanced Enterprise Server Edition (AESE) を使用している場合は、Infosphere Federation Server が含まれていることに注意してください。

どちらの製品でも、1 つの DB に送信される単一の結合クエリを使用して、両方の DB からデータを返すことができます。Oracle 製品は、Oracle が DB2 データベースを別の Oracle DB として認識し、DB2 が Oracle データベースを別の DB2 データベースとして認識できるという点で非常に優れています。(IBM が DB2 が使用する DRDA プロトコルのクライアント側とサーバー側の両方の仕様を公開してくれたことに感謝します。IBM がそうしたという事実を利用するのに問題はありませんが、他のベンダーがそうしようとしているのは残念です。)

どちらの製品も私が安いと呼ぶものではありません。
安価な場合は、Oracle Database Gateway for ODBC
http://docs.oracle.com/cd/E16655_01/gateways.121/e17936/toc.htmを利用できます。

開始したパスを本当に続行したい場合... 2つのオプションがあります
1)Javaアプリバッチで1000個のDB2レコードをOracleの一時テーブルに挿入し、それを結合で使用して最終結果を取得します。
Java から Oracle への一括挿入
2) 1000 個の TYPEA レコードを単一の文字列パラメーターとして Oracle のストアド プロシージャに渡し、それらを解析して利用します (あまり大きくないと仮定します)。

于 2014-01-29T03:15:24.217 に答える