ORA-00911 Oracle 查询中的无效字符

Ora-00911 Invalid Character in Oracle Query

提问人:Andy 提问时间:3/9/2023 最后编辑:Barbaros ÖzhanAndy 更新时间:3/9/2023 访问量:229

问:

我刚刚尝试了以下查询:

SELECT EXAM_NUMBER, DATE_EXAM, DATE_UNIV
  FROM UNIVERSITY.C_CALENDAR cc2
 WHERE EXAM_NUMBER = 'L'
   AND LAST_FILE = 'OK'
   AND MATTER = 'MATH'
   AND STATE_CODE NOT IN ('FC')
   AND TO_CHAR(DATE_EXAM, 'YYYY-MM-DD') = TO_CHAR(SYSDATE - 2, 'YYYY-MM-DD')
   AND TO_CHAR(DATE_UNIV, 'YYYY-MM-DD HH24:MI:SS') < TO_CHAR(SYSDATE - 5, 'YYYY-MM-DD HH24:MI:SS')
 ORDER BY DATE_EXAM DESC

我总是出错

ORA-00911:无效字符

你能帮我吗?

SQL Oracle 语法错误

评论

2赞 Barbaros Özhan 3/9/2023
只需摆脱转换及其格式掩码,因为这些列在转换为TO_CHAR()TO_CHAR(DATE_EXAM, 'YYYY-MM-DD') = TO_CHAR(SYSDATE - 2, 'YYYY-MM-DD')TRUNC(DATE_EXAM) = TRUNC(SYSDATE - 2)
0赞 MT0 3/9/2023
Fiddle 未显示该错误。

答:

0赞 MT0 3/9/2023 #1

您的查询似乎没问题。源代码中可能有一个不可见的字符(但当我从您的问题中复制粘贴时,即使查看标记,它也不会显示)。

筛选时不需要使用(因为它会阻止 Oracle 在列上使用索引):TO_CHAR

SELECT EXAM_NUMBER,
       DATE_EXAM,
       DATE_UNIV
FROM   UNIVERSITY.C_CALENDAR cc2
WHERE  EXAM_NUMBER =  'L'
AND    LAST_FILE   =  'OK'
AND    MATTER      =  'MATH'
AND    STATE_CODE  != 'FC'
AND    DATE_EXAM   >= TRUNC(SYSDATE - 2)
AND    DATE_EXAM   <  TRUNC(SYSDATE - 1)
AND    DATE_UNIV   <  SYSDATE - 5
ORDER BY
       DATE_EXAM DESC

小提琴

0赞 d r 3/9/2023 #2

从 sql 开发人员使用时看起来没问题。
如何使用此命令?根据我的经验,如果我在使用 Execute Immediate 或连接到 oracle db 的其他软件运行命令时有额外的分号,则会引发该错误。例如,当从 python 程序运行并且命令末尾有分号时,oracle 返回: cx_Oracle.DatabaseError: ORA-00911:
invalid character 没有分号,一切都很好。