我在查询两个Oracle数据库时遇到了麻烦 .
查询是:
SELECT trunc(null)
FROM dual
WHERE (null is null
or SYSDATE >= TRUNC(null))
(NULL实际上是一个参数,传递给查询,可能为null,因此我将查询缩短了) .
在 生产环境 数据库上,它工作正常,响应为NULL .
在dev DB上我发现错误,TRUNC不能应用于NUMBER并且期望DATE(ORA-00932) .
显然, 生产环境 DB在OR之后跳过条件中的所有内容,开发人员在OR之后执行该部分 .
我知道通过在每个查询中添加CAST(MY_PARAM作为日期)来解决问题的解决方案,但它并不适合我 - 需要更改很多代码 .
问题是:在我错过的数据库中是否有一些设置可以防止条件扫描已经存在或者是否依赖于数据库版本?
我的 生产环境 数据库是:
-
Oracle数据库11g企业版11.2.0.4.0版 - 64位 生产环境
-
PL / SQL版本11.2.0.4.0 - 生产环境
-
CORE 11.2.0.4.0 生产环境
-
适用于64位Windows的TNS:版本11.2.0.4.0 - 生产环境
-
NLSRTL版本11.2.0.4.0 - 生产环境
我的dev db是:
-
Oracle数据库11g企业版11.2.0.1.0版 - 64位 生产环境
-
PL / SQL版本11.2.0.1.0 - 生产环境
-
CORE 11.2.0.1.0 生产环境
-
适用于64位Windows的TNS:版本11.2.0.1.0 - 生产环境
-
NLSRTL版本11.2.0.1.0 - 生产环境
1 回答