2016-11-24 178 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'))) 

皮斯通知,它可以簡化,我只寫了一樣,爲清楚