2016-11-24 107 views
0

为什么该查询返回缺少关键字的错误与Oracle数据库:缺少关键字例外甲骨文

注:区分大小写状态被用来选择一个合适的地方语句的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 
+0

保健佳品模式请! –

+0

'CASE'应该做什么?这表示'如果OFFICE_TYPE_CD IN(7)'CASE'值应该是'office_level_cd <(...)'这是没有意义的。试着解释你需要用这个查询来做什么 – Aleksej

+0

由于'case'表达式的使用不正确。由于您将比较运算符放在case表达式的'then'子句中,因此会引发'missing keyword'错误。当你修复这个'无效的关系运算符'时会被引发,因为在'where'子句中你必须将'case'表达式的结果与某些东西进行比较。 –

回答

1

你可能想要写的东西是这样的:

SELECT OFFICE_TYPE_CD, OFFICE_TYPE_DESC 
    FROM m_office_types 
WHERE  RECORD_STATUS = 'C' 
     AND state_cd = 27 
     AND OFFICE_NAME IS NOT NULL 
     AND ( ( OFFICE_TYPE_CD IN (7) 
       AND office_level_cd < (SELECT DISTINCT office_level_cd 
             FROM m_office_types 
             WHERE  office_type_cd = 7 
               AND RECORD_STATUS <> 'D')) 
      OR ( OFFICE_TYPE_CD NOT IN (7) 
       AND office_level_cd <= (SELECT DISTINCT office_level_cd 
              FROM m_office_types 
             WHERE  office_type_cd = 7 
               AND RECORD_STATUS <> 'D'))) 

皮斯通知,它可以简化,我只写了一样,为清楚