通过预准备语句从oracle DB中检索值数组

时间:2014-01-28 09:03:27

标签: sql oracle db2 batch-processing batch-updates

在我们的批处理项目中,我们运行一个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数据库。 我的所有逻辑都是用Web服务操作(JAVA)编写的。

更新

是的,我通过JNDI名称直接访问数据库。在webservice处理程序逻辑中,我将调用两个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动态查询。

1 个答案:

答案 0 :(得分:0)

假设你这样做Oracle< - > DB2的东西很多,考虑得到 - 适用于DRDA的Oracle透明网关     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。

这两种产品都允许您使用发送到一个DB的单个连接查询,该DB从两个DB返回数据。 Oracle产品非常好用,它允许Oracle将DB2数据库视为另一个Oracle数据库,并使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 app批处理将1000条DB2记录插入到Oracle的临时表中,然后在连接中使用它来获得最终结果。
bulk insert from Java into Oracle
2)将1000个TYPEA记录作为单个字符串参数传递给Oracle上的存储过程,解析出来并使用它们(假设它们不是太大)