by 짱구 [SQL Query] oracle query case decode where if else [2016.06.09 17:13:37]
안녕하세요.
SELECT * FROM DUAL WHERE CASE WHEN 'Y' = 'Y' THEN C = '6' ELSE C <> '6' END
여기서 select * from dual은 문장 구색 맞출려고 쓴거구요
where case when 'Y' = 'Y' <= 앞 'Y' 는 입력 받는 값입니다.
** 따라서 입력에 따라 조건을 달리 하고 싶습니다.
어떤 방법이 있는지 알려주시면 고맙겠습니다.
감사합니다.
SELECT * FROM DUAL WHERE ((:VAL = 'Y' AND C = '6') OR (:VAL != 'Y' AND C <> '6'))
멍청한 옵티마이저가 or 조건 많아지면 엉뚱한 실행계획 타는 경우가 있어서
되도록 그냥 쿼리 string 만들 때 조건에 따라 조건절이 달라지게 만드는 게 좋고..
그렇게 안 하려면 위 쿼리처럼 or 조건 사용하세요.
SELECT * FROM DUAL WHERE 1 = CASE WHEN 'Y' = 'Y' AND C='6' THEN 1 WHEN 'Y' != 'Y' AND C<> '6' THEN 1 END
이것도 되지않을까여?