Oracle 12c:trunc(date) 错误导致数据错误
Oracle 12c: Bug with trunc(date) results in wrong data
我的 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 个结果。
经过一些深入的分析后,我发现我遇到了一个 Oracle 错误 -> 错误 18461054:在分区上使用日期绑定进行截断 TABLE 给出错误的结果
所以这个问题可能会发生在 trunc 或 round date 上。
当前会话的解决方法是
alter session set "_optimizer_generate_transitive_pred"=false;
还有一个补丁 Patch 18461054: TRUNC WITH DATE BIND ON PARTITIONED TABLE GIVE WRONG RESULTS
希望对我以外的人有所帮助:)
最佳,
帕特里克
我的 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 个结果。
经过一些深入的分析后,我发现我遇到了一个 Oracle 错误 -> 错误 18461054:在分区上使用日期绑定进行截断 TABLE 给出错误的结果
所以这个问题可能会发生在 trunc 或 round date 上。
当前会话的解决方法是
alter session set "_optimizer_generate_transitive_pred"=false;
还有一个补丁 Patch 18461054: TRUNC WITH DATE BIND ON PARTITIONED TABLE GIVE WRONG RESULTS
希望对我以外的人有所帮助:)
最佳,
帕特里克