Oracle 10g - 插入临时表 - 记录select和insert之间的计数不匹配

时间:2013-03-20 05:51:18

标签: oracle insert temp-tables

我们正在尝试从select查询中插入记录到临时表中,临时表中缺少一些记录。 select语句有多个连接和联合,它几乎没有复杂的查询。 简单来说,脚本包含2部分 第一部分    插入临时表 第二部分    选择具有多个联接,内联子查询,联合以及按类和条件分组的查询

EG。    如果我们单独执行select语句,则返回一些计数,例如=> 60000    插入临时表后,在临时表中,计数大约为42000 为什么会有区别?

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


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

但是,我们不知道这个解决方案好吗?以及如何清除缓存在后台运行和插入失败。如果确实如此,我猜错了配置设置。

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

任何人都可以解释?

提前感谢您的努力和帮助。

希瓦。

2 个答案:

答案 0 :(得分:0)

在我看来,连接应该是Full Outer Join,因此两个表中的记录虽然不匹配,但会出现在结果中。请检查:http://en.wikipedia.org/wiki/Join_%28SQL%29#Full_outer_join

答案 1 :(得分:0)

我们得到了一个解决方案,一旦我们清除了会话缓存(checkpoint,flush shared_pool和buffer_cache),它就可以正常运行Re_Run。 但是,我们不是这个解决方案好吗?以及如何清除缓存在后台运行和插入失败。如果确实如此,我猜错了配置设置。

任何人都可以解释?