sql - Oracle SQL 错误 "missing expression"(但相同的 SQL 查询在 MySQL 中有效)

标签 sql oracle

我有一个现有的大型企业应用程序,由于各种原因,我们正在将数据库从 MySQL 转换为 Oracle。目前,我们有数百条 MySQL 命令可以在 Oracle 中轻松运行,只有一条除外。以下 SQL 在 MySQL 上执行没有任何问题:

SELECT `user_id`, `shift_type`, `date`, COUNT(*) as c
FROM `staff`
WHERE `date` = '2020-02-02' AND `shift_type` != 'oncall'
GROUP BY user_id, shift_type, date
HAVING c > 1

这将执行并向我们提供在给定日期内多次存在且符合上述条件的任何员工的结果。但是在 Oracle 中运行相同的 SQL 查询,并删除撇号(按照 Oracle 的要求),我们会收到一条错误消息:ORA-00936:缺少表达式。这正是我尝试过的 Oracle SQL:

SELECT user_id, shift_type, date, COUNT(*) as c
FROM staff
WHERE date = '2020-02-02' AND shift_type != 'oncall'
GROUP BY user_id, shift_type, date
HAVING c > 1

我已经检查了许多其他有关此错误代码的 Stack Overflow 答案。大多数是指删除多余的逗号。我已经在上面的各个部分尝试过,但似乎没有任何效果。真的希望这里有人能够帮助我指明正确的方向。

最佳答案

正确的语法 - “date” 而不是 dateHAVING COUNT(*)>1:

SELECT user_id, shift_type, "date", COUNT(*) as c
FROM staff
WHERE "date" = '2020-02-02' 
  AND shift_type != 'oncall'
GROUP BY user_id, shift_type, "date"
HAVING COUNT(*) > 1;

db<>fiddle.com demo


ORA-00936: missing expression

Oracle 期望此处为日期文字,因此错误:

SELECT date '2020-01-01'
FROM dual

使用关键字作为标识符也不是最佳做法。

关于sql - Oracle SQL 错误 "missing expression"(但相同的 SQL 查询在 MySQL 中有效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68962787/

相关文章:

sql - 什么是SQL Server的文化中立日期格式

mysql - 非法混合排序规则 MySQL 错误

sql - 关于存储过程中的立即执行

sql - 如何从表中查找特定列?

java - oracle中获取元数据函数

sql - 子查询连接和 where 中的差异可见性

sql - ORACLE SQL ORA-22814 属性或元素值大于指定类型

sql - Oracle SQL - 周开始星期日和周末结束星期六

sql - 顶点 : Submit without refreshing the page

xml - 如何让 PL/SQL 解析 Oracle 中的 XML 属性而不是 XML 元素?