1

我们正在尝试将选择查询中的记录插入到临时表中,临时表中缺少一些记录。select 语句有多个连接和联合,所有这些都很少复杂的查询。简单来说,脚本包含 2 部分 第 1 部分 插入到临时表 第 2 部分 选择具有多个连接的查询、内联子查询、联合和按类和条件分组

例如。如果我们单独执行 select 语句,它会返回一些计数,例如 => 60000 插入临时表后,临时表中的计数在 42000 左右,为什么会有差异?

此外,我们还有其他一些观察。它只发生在第二次执行而​​不是第一次运行中。希望可能有一些缓存问题


我们得到了一个解决方案,一旦我们清除了会话缓存(检查点、刷新 shared_pool 和 buffer_cache),它就可以正常运行 Re_Run。

但是,我们不知道这个解决方案可以吗?以及如何在后台清除缓存和插入失败。如果是真的,我猜是配置设置错误。

代码看起来像 sql = "insert in to temptable select x,y,z,.... from xxx,abc,pqr..where...."; (逻辑但不真实非常复杂,大约 700 行,包含多个连接、内联子查询、分组依据等。) stmt = conn.createStatement(); rCount=stmt.executeUpdate(sql); 实际问题是 rCount = xxxx = Count(temptable) < count(select x,y,z,.... from xxx,abc,pqr..where....) 为什么会有这种差异?一些记录在选择中填充但未插入到临时表中

谁能解释一下?

预先感谢您的努力和帮助。

湿婆。

4

2 回答 2

0

在我看来,连接应该是完全外连接,这样两个表中的记录都会出现在结果中,尽管它们不匹配。请检查:http ://en.wikipedia.org/wiki/Join_%28SQL%29#Full_outer_join

于 2013-03-20T06:01:48.997 回答
0

我们得到了一个解决方案,一旦我们清除了会话缓存(检查点、刷新 shared_pool 和 buffer_cache),它就可以正常运行 Re_Run。 但是,我们不这样解决好吗?以及如何在后台清除缓存和插入失败。如果是真的,我猜是配置设置错误。

谁能解释一下?

于 2013-03-21T04:55:50.240 回答