oracle窗口函数+左连接导致的灵异bug
oracle窗口函数导致的灵异bug
现象描述:
oracle存储过程中使用窗口函数累积表中的某一字段,分别在10.2.0.3,10.2.0.4库中进行过详尽测试,没出现过问题,但是上线后出现bug,且稳定复现,分析后确定问题,窗口函数累积出错。
进一步分析发现:sql中OVER PARTITION BY 条件与FROM表的关联条件是相同的三个字段,于是试着调整FROM表的关联条件为另外的PK字段,问题解决。
最开始关联条件的三个字段与调整后的PK字段在维度上是一致的,也就是说,字段A+字段B+字段C就能确定到唯一的一条字段PK,不应该出现这样的问题,本地不能复现,生产环境不能碰,最后只好归结到oracle出现bug上去...
SQL如下:
改前:
select nvl(acc.A, 0) + sum(tf.A) over(partition by tf.pk1, tf.pk2, tf.pk3 order by tf.C) from t_temp_flow tf, t_temp_acccount ta, (select * from t_account where corp = :1) acc where tf.pk1 = ta.pk1 and tf.pk2 = ta.pk2 and tf.pk3 = ta.pk3 and ta.pk = acc.pk(+)