0

在我们的 Batch 项目中,我们运行一个 shell 脚本,该脚本又调用一个 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 帐户的列表或哈希图,以便我可以进一步使用它们,那将非常有帮助。此外,我必须使用 B_TYPE 帐户代替 A_TYPE 帐户来更新我的 Db2 DB。我所有的逻辑都是用 Web 服务操作(JAVA)本身编写的。

更新:

是的,我通过 JNDI 名称直接访问数据库。在 web 服务处理程序逻辑中,我将调用两个数据库。我不知道使用的 DB2 版本,因为我使用 JNDI 名称访问它,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 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 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

如果您真的想沿着您开始的路径继续...我看到两个选项
1) 让您的 java 应用程序将 1000 条 DB2 记录批量插入 Oracle 中的临时表中,然后在连接中使用它以获得最终结果。
从 Java 批量插入到 Oracle
2) 将 1000 条 TYPEA 记录作为单个字符串参数传递到 Oracle 上的存储过程中,该过程将它们解析出来并使用它们(假设它们不是太大)

于 2014-01-29T03:15:24.217 回答