2016-11-24 4 views
0

이 쿼리가 Oracle 데이터베이스에서 누락 된 키워드 오류를 반환하는 이유는 다음과 같습니다.누락 된 키워드 예외 Oracle

참고 : WHERE 조건에 적절한 where 문을 선택하는 데 대문자 조건이 사용됩니다. 이것은 오라클로 마이 그 레이션하는 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

'사례'는 어떻게해야합니까? 이것은'OFFICE_TYPE_CD IN (7)'이'CASE' 값이'office_level_cd <(...)'이어야한다는 것을 의미합니다. 이 쿼리를 사용하여 수행해야 할 작업에 대해 설명하십시오. – Aleksej

+0

'case' 표현의 잘못된 사용으로 인해. case 표현식의'then' 절에 비교 연산자를 넣으므로'누락 된 키워드'오류가 발생합니다. 이 문제를 해결할 때'where' 절에서'case' 표현식의 결과를 무언가와 비교해야하기 때문에 'Invalid relational operator'가 발생합니다. –

답변

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'))) 
이 단순화 될 수

피스의 통지, 난 단지 스키마하시기 바랍니다 공유하는