2014-01-28 3 views
0

В нашем пакетном проекте мы запускаем сценарий оболочки, который, в свою очередь, вызывает веб-службу. Наше требование состоит в том, чтобы запускать запрос выбора в базе данных БД 2 и извлекать ответ 1000 A_TYPE учетных записей, то нам придется использовать эти учетные записи, чтобы получить список других учетных записей (A_TYPE, столбцы B_TYPE), используя учетные записи A_TYPE в подготовленном операторе из базы данных ORACLE.Извлечение массива значений из Oracle с помощью подготовленного оператора

Проблема заключается в том, что для каждых 1000 учетных записей A_TYPE я должен подготовить инструкцию 1000 раз и выполнить ее 1000 раз, чтобы получить учетную запись B_TYPE. Это время и не очень эффективны.

Так что если кто-то может предложить мне способ передать список или массив учетных записей A_TYPE, а затем получить список или хэш-карту учетных записей A_TYPE, B_TYPE, чтобы я мог их использовать дальше, это было бы очень полезно. Также мне нужно обновить свою БД Db2 учетными записями B_TYPE вместо учетных записей A_TYPE. Вся моя логика написана в режиме веб-службы (JAVA).

UPDATE:

Да я непосредственно доступ к БД через JNDI names.In логики обработчика вебсервис я буду делать вызов как DB's.I DONOT узнать версию DB2 используется, так как я к нему доступ с помощью JNDI имя, Oracle 10 ГИ есть запросы, как

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)' 

Нет я не придется беспокоиться о transactions.i не имеют представления о переменных хоста и DB2 динамического запроса.

+1

Я искренне сомневаюсь, что вы _need_ к каждый раз подготавливайте заявление - обычно подготовленные заявления содержат заполнители для переменных хоста (по существу), что означает, что вам нужно только подготовить «схему».Если вы просто загружаете DB2 динамическим запросом (без предварительной подготовки), это будет делать это автоматически (вытащить переменные хоста и кешировать один оператор), хотя вам будет лучше сделать одну подготовку. Какие заявления у вас есть, и вам нужно беспокоиться о транзакциях? Вы напрямую обращаетесь к dbs или только через webservice? Какие версии/платформы для dbs (особенно DB2)? –

+0

Да, я непосредственно получаю доступ к БД через имена JNDI. Я не знаю версию DB2, используемую с момента обращения к ней с использованием имени JNDI. –

ответ

0

Предполагая, что вы делаете это Oracle < -> DB2 вещи много, рассмотреть возможность получения
- Oracle Transparent Gateway, для 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.

Оба продукта позволят вам использовать один запрос соединения, отправленный в одну БД, которая возвращает данные из обеих БД. Продукт Oracle действительно хорош в том, что он позволяет Oracle видеть базу данных DB2 в качестве другой базы данных Oracle и для DB2, чтобы увидеть базу данных Oracle в качестве другой базы данных DB2. (Благодаря IBM публикует спецификации как для клиентской, так и для серверной части протокола DRDA, который использует DB2. Слишком плохо, что другой поставщик не хочет этого делать, хотя они не имеют проблем с использованием того факта, что IBM сделала это.)

Ни один из продуктов - это то, что я бы назвал дешевым.
Для дешево, вы можете воспользоваться Oracle Database шлюза для ODBC
http://docs.oracle.com/cd/E16655_01/gateways.121/e17936/toc.htm

Если вы действительно хотите продолжить вниз путь вы начали ... Я вижу два варианта
1) есть свой Java пакет приложений вставляет 1000 записей DB2 во временную таблицу в Oracle, а затем использует их в объединении для окончательных результатов.
bulk insert from Java into Oracle
2) проходят 1000 TypeA записи в качестве единственного параметра строки в хранимой процедуре на Oracle, который анализирует их и делает их использование (при условии, что они не слишком велики)

+0

Спасибо за ваш ответ ... но у меня нет возможности использовать DB2 AESE. И у меня нет доступа к созданию таблицы в Oracle Database. Создание также хранимой процедуры также невозможно. –

Смежные вопросы