我有一个现有的大型企业应用程序,由于各种原因,我们正在将数据库从 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”
而不是 date
和 HAVING 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;
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/