sql - Oracle SQL 错误“缺少表达式”(但相同的 SQL 查询在 MySQL 中有效)
问题描述
我有一个现有的大型企业应用程序,出于各种原因,我们正在将数据库从 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 的要求),我们得到一个Error Message : ORA-00936: missing expression
. 这是我尝试过的确切 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
and 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: 缺少表达式
Oracle 在这里期望日期文字,因此错误:
SELECT date '2020-01-01'
FROM dual
使用关键字作为标识符也不是最佳做法。
推荐阅读
- javascript - How I can embed Microsoft-Word in my web application?
- excel - How to copy cell value to a specific cell in a new worksheet before double click?
- javascript - 没有 REST 框架的 Linux 中的 JavaScript / Python 交互?
- list - Facing issues with passing list of Ids from one View to another controller
- sql - How to replace a string of ID-s with data connected to those ID-s in a SELECT
- python - 无法通过 Python 使用 alpine docker 映像连接到 Azure SQL
- r - 如何拆分具有两个变量的列
- python - How to install and use python libraries in mac using PIP with terminal
- php - Retrofit 2 在 Postman 和 Localhost 中工作,但不在 Amazon AWS Live Server 上
- node.js - 如何为生产级别的不同服务器动态连接具有不同凭据的数据库?