【发布时间】:2016-11-24 07:02:51
【问题描述】:
为什么此查询返回 Oracle 数据库缺少关键字错误:
注意:Case 条件用于为 WHERE 条件选择适当的 where 语句。这是我正在迁移到 Oracle 的 mysql 查询。
SELECT OFFICE_TYPE_CD, OFFICE_TYPE_DESC
FROM m_office_types
WHERE CASE
WHEN OFFICE_TYPE_CD IN (7)
THEN
office_level_cd < (SELECT DISTINCT office_level_cd
FROM m_office_types
WHERE office_type_cd = 7
AND RECORD_STATUS <> 'D')
ELSE
office_level_cd <= (SELECT DISTINCT office_level_cd
FROM m_office_types
WHERE office_type_cd = 7
AND RECORD_STATUS <> 'D')
END
AND RECORD_STATUS = 'C'
AND state_cd = 27
AND OFFICE_NAME IS NOT NULL
【问题讨论】:
-
请注意分享架构!
-
CASE应该怎么做?这表示if OFFICE_TYPE_CD IN (7)的CASE值应该是office_level_cd < (...),这是没有意义的。试着解释你需要用这个查询做什么 -
因为
case表达式的使用不正确。引发missing keyword错误是因为您将比较运算符放在 case 表达式的then子句中。当您修复此Invalid relational operator时,将引发此问题,因为在where子句中,您必须将case表达式的结果与某些内容进行比较。 -
您的问题中没有 PL/SQL。我也很确定即使是 MySQL 也不允许运行它。