我在查询两个Oracle数据库时遇到了麻烦。
查询是:
SELECT trunc(null)
FROM dual
WHERE (null is null
or SYSDATE >= TRUNC(null))( NULL实际上是一个param,传递给一个查询,该查询可能是null,因此我缩短了查询)。
在生产DB上,它工作正常,响应为NULL。
在dev DB上,我捕捉到一个错误,即TRUNC不能应用于数字并期望日期(ORA-00932)。
显然,production在OR之后跳过了条件中的所有内容,而开发人员在OR之后执行部分。
我知道通过在每个查询中添加CAST(MY_PARAM作为日期)来解决这个问题的解决方案,但是它并不适合我--有很多代码需要修改。
问题是:在我错过的DB中是否有一些设置可以防止条件扫描在它已经为真之后,还是它依赖于DB版本?
我的生产数据库是:
我的dev db是:
发布于 2015-11-06 11:57:40
SELECT CASE (PARAM IS NULL) THEN NULL ELSE TRUNC(PARAM) END
FROM TABLEhttps://stackoverflow.com/questions/33566170
复制相似问题