我在查询两个Oracle数据库时遇到了麻烦。
查询是:
SELECT trunc(null)
FROM dual
WHERE (null is null
or SYSDATE >= TRUNC(null))
(NULL实际上是一个参数,传递给查询,可能为空,所以我将查询缩短了。)
在生产数据库上,它工作正常,响应为NULL。
在dev DB上我发现错误,TRUNC无法应用于NUMBER并期望DATE(ORA-00932)。
显然生产DB在OR之后跳过条件中的所有内容,开发人员在OR之后执行该部分。
我知道通过在每个查询中添加CAST(MY_PARAM作为日期)来解决问题的解决方案,但它并不适合我 - 需要更改很多代码。
问题是:在我错过的数据库中是否有一些设置可以防止条件扫描已经存在或者是否依赖于数据库版本?
我的生产数据库是:
我的开发数据库是:
答案 0 :(得分:0)
SELECT CASE (PARAM IS NULL) THEN NULL ELSE TRUNC(PARAM) END
FROM TABLE