首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-01797:该运算符后面必须有任何或全部错误。

ORA-01797:该运算符后面必须有任何或全部错误。
EN

Stack Overflow用户
提问于 2017-08-30 08:08:29
回答 3查看 34.2K关注 0票数 3

当我执行查询时,

代码语言:javascript
复制
select *
from file_log f
where F.DCP_SRCE_FILENM_FK in ('ABC','DEF') and
      F.TRANS_DT>=to_date('08/25/2017','mm/dd/yyyy') and
      F.TRANS_DT<=('08/30/2017','mm/dd/yyyy')

我收到以下错误:

ORA-01797:这个操作符后面必须跟着任意或全部.

请大家帮我写一个正确的查询,这样这个错误就会消失吗?

EN

回答 3

Stack Overflow用户

发布于 2017-08-30 08:10:15

只需使用date关键字和ISO常量:

代码语言:javascript
复制
select *
from file_log f
where F.DCP_SRCE_FILENM_FK in ('ABC','DEF') and
      F.TRANS_DT >= date '2017-08-25' and
      F.TRANS_DT <= date '2017-08-30';

您将得到错误,因为第二个常量缺少to_date()。但是,您最好对日期常量使用正确的语法。

票数 3
EN

Stack Overflow用户

发布于 2017-08-30 09:13:46

你错过了TO_DATE

代码语言:javascript
复制
select *
from file_log f
where F.DCP_SRCE_FILENM_FK in ('ABC','DEF') and
      F.TRANS_DT>=to_date('08/25/2017','mm/dd/yyyy') and
      F.TRANS_DT<=TO_DATE('08/30/2017','mm/dd/yyyy')     -- Missing on this line

为什么要抛出异常

SQL解析器无法识别您打算使用TO_DATE函数,并假设最后一行试图将F.TRANS_DT与1 (ANY)或两者(ALL)进行比较,因此假设查询应该具有语法:

代码语言:javascript
复制
select *
from file_log f
where F.DCP_SRCE_FILENM_FK in ('ABC','DEF') and
      F.TRANS_DT>=to_date('08/25/2017','mm/dd/yyyy') and
      F.TRANS_DT<= ANY ('08/30/2017','mm/dd/yyyy')

这是一个语法上有效的查询。但是,它不会执行,因为尝试解析F.TRANS_DT <= 'mm/dd/yyyy'比较将导致试图隐式地将右侧的字符串转换为几乎肯定会在ORA-01858: a non-numeric character was found where a numeric was expected中失败的日期。但是SQL解析器已经尽了最大的努力来建议缺少什么来使查询有效。

票数 3
EN

Stack Overflow用户

发布于 2018-09-14 10:07:46

对于那些最终搜索ORA-01797错误的人:

当逻辑运算符( =,!=,>,<,<=,>= )的右侧包含多个值时,会出现此错误。

可能的解决办法:

  1. 确保逻辑运算符的右侧包含单个值。
  2. 使用IN代替(=)和使用NOT IN代替( != )处理多个值
  3. 使用ALLANYSOME作为记录在案处理多个值。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45955152

复制
相关文章

相似问题

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