提问人:Andy 提问时间:3/9/2023 最后编辑:Barbaros ÖzhanAndy 更新时间:3/9/2023 访问量:229
ORA-00911 Oracle 查询中的无效字符
Ora-00911 Invalid Character in Oracle Query
问:
我刚刚尝试了以下查询:
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:无效字符
你能帮我吗?
答:
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 没有分号,一切都很好。
评论
TO_CHAR()
TO_CHAR(DATE_EXAM, 'YYYY-MM-DD') = TO_CHAR(SYSDATE - 2, 'YYYY-MM-DD')
TRUNC(DATE_EXAM) = TRUNC(SYSDATE - 2)