Oracle 12c:错误的截断(日期)导致错误的数据

时间:2016-11-21 14:36:36

标签: oracle12c

我的Oracle 12 c数据库有一个非常奇怪的行为。当我做类似的事情时:

select count(*) from fact_table, date_dim, dim_table where 
date_dim.date >= trunc(sysdate)-1
and fact_table.DATE_ID = date_dim.DATE_ID
and fact_table.DIM_ID = dim_table.DIM_ID;

......我得到一定数量。当我将'> ='更改为'='时,奇怪的行为就开始了 - 只有然后才能获得双倍金额。我检查了连接条件,但据我所知,如果我在昨天过滤日期'> ='而不是昨天的日期'=',那么金额应该更大或相同。

为什么会这样?是否有可能导致SQL中重复数据的设置?

编辑连接条件两个连接条件只有1个结果。

1 个答案:

答案 0 :(得分:2)

经过一些激烈的分析,我发现我遇到了一个oracle bug - >错误18461054:TRUNC与分区表上的日期绑定产生错误的结果

因此,截止日期或圆形日期可能会出现此问题。

当前会话的解决方法是

alter session set "_optimizer_generate_transitive_pred"=false;

还有一个补丁修补程序18461054:TRUNC WITH DATE BIND分区表给出了错误的结果

希望能帮助别人而不是我:)

最佳,

帕特里克