2016-11-24 5 views
0

Oracleデータベースでキーワード・エラーが返される理由:キーワードの例外がありません。Oracle

注意: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 
+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'))) 

ピーズ通知を、私は、スキーマをしてください共有すること明確にするため

関連する問題