首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle评估条件不正确

Oracle评估条件不正确
EN

Stack Overflow用户
提问于 2015-11-06 11:49:41
回答 1查看 92关注 0票数 2

我在查询两个Oracle数据库时遇到了麻烦。

查询是:

代码语言:javascript
复制
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版本?

我的生产数据库是:

  • Oracle数据库11g企业版发布11.2.0.4.0-64位生产
  • PL/SQL版本11.2.0.4.0 -生产
  • 核心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 -生产
  • 核心11.2.0.1.0生产
  • 用于64位Windows的TNS : 11.2.0.1.0版本-生产
  • NLSRTL版本11.2.0.1.0 -生产
EN

回答 1

Stack Overflow用户

发布于 2015-11-06 11:57:40

代码语言:javascript
复制
SELECT CASE (PARAM IS NULL) THEN NULL ELSE TRUNC(PARAM) END
FROM TABLE
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33566170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档