快速业务通道

跨多个数据源的J2EE开发: 细节探讨 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
;WHERE ps_partkey = ? " +   "AND ps_suppkey = s_suppkey " +   "AND s_nationkey = n_nationkey " +   "AND n_name = ? " +   "GROUP BY ps_partkey, s_name, s_suppkey"; // ------------------------ Oracle remote ------------------------ // select for query #2 query2[2]= "SELECT ps_partkey, s_name, s_suppkey, MIN(ps_supplycost) AS min_supplycost " +   "FROM partsupp, supplier, nation " +   "WHERE ps_partkey = ? " +   "AND ps_suppkey = s_suppkey " +   "AND s_nationkey = n_nationkey " +   "AND n_name = ? " +   "GROUP BY ps_partkey, s_name, s_suppkey"; // ------------------------ Excel local --------------------------- // select for query #2 query2[3]= "SELECT ps_partkey, s_name, s_suppkey, MIN(ps_supplycost) AS min_supplycost " +   "FROM [partsupp$], [supplier$], [nation$] " +   "WHERE ps_partkey = ? " +   "AND ps_suppkey = s_suppkey " +   "AND s_nationkey = n_nationkey " +   "AND n_name = ? " +   "GROUP BY ps_partkey, s_name, s_suppkey"; // insert statement for intermediate data for query #2 temp_insert[2]= "INSERT INTO temp_query2(ps_partkey, s_name, " +   "s_suppkey,   min_supplycost) " +   "VALUES(?, ?, ?, ?)"; // final statement for query #2 temp_select[2]= "SELECT ps_partkey, s_name, s_suppkey, MIN(min_supplycost) AS ps_supplycost " +   "FROM temp_query2 " +   "GROUP BY ps_partkey, s_name, s_suppkey"; // delete statements for temporary tables temp_delete[2] = "DELETE FROM temp_query2";

跨多个数据源的J2EE开发: 细节探讨(8)

时间:2011-04-11 IBM C. M. Saracco

查询 3 是更有趣的情况。可能您还记得,该查询设计成在一定时间段内确定最佳的 10 个客户 - 即,在某个时间段内向我们的合并公司订货金额最高的客户。如果我们对一个 单独的表(或 DB2 Information Integrator 提供的一个单独的虚拟表)发出该查询,我 们累计每个客户的所有订单、按降序返回结果并将返回的行数限制为 10。

但是当我们直接对不同的数据源提出这个问题时,事情变得更加复杂了。我们不能只发 出基本查询而使其 ORDER BY 子句和结果大小限制保持原样。为什么?这是因为(如果这 样做)我们可能得到不正确的结果。如果一个客户向我们合并前的三个公司分别下了订单 ,这些订单不能列入每个公司的前 10 位,但是当它们加起来产生的总和却排到合并后公 司的前 10 位,这种情况下怎么办?而我们不想遗漏这些客户。要确保我们不遗漏这些客 户唯一的方法是,我们从每个数据源检索所有满足条件的行并在合并(中间)的结果集上 应用 ORDER BY 和大小限制子句。

当然,如以下代码说明的那样,我们就是这样做的。我们必须考虑好原始查询的语义以 确保没有违背我们的初衷,但是这并不是那么明显的。仅把整个查询按照其原始的状态在 每个目标数据源上执行,这本是很容易而且诱人的。毕竟这对查询 1(它也有结果集大小 限制)是可行的。但是在这里行不通,其原因我们刚才已经说明。要说明其中的区别需要 时间、精力和技巧 - 也许比马上就能感觉到的还要多。

// ------------------------- DB2 remote ------------------------

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号