하지만 만약 파라미터가 null이라면 where 조건 자체를 안타게 하고싶은데 방법이 있나요?
예) 파라미터가 NULL일때 : select * from dual 파라미터가 있을때 : select * from dual where name = 'test' 이런식으로 조건절을 아예 안타게 하고 싶습니다.
by 용근님
[2013.07.16 10:04:10]
( ( :req is null and 1 = 1 ) or ( :req is not null and name = 'test' ) )
by 풀텀
[2013.07.16 10:12:16]
예시를 들어주실 수 있을까요? 1) select * from dual where name = 'test'
2) select * from dual where name = ((:req is null and 1=1) or (:req is not null nad name = 'test'))
2)번처럼 해야하는건가요?
by 우리집아찌
[2013.07.16 10:09:05]
쿼리를 두개 짜서 분기시키면 되지않을까요?
by 풀텀
[2013.07.16 10:12:51]
저도 그생각을 했지만 이런 방법가 가능할지 싶어서요. 방법은 있겠지만 어떻게 해야하는지 알고싶습니다.
by 부쉬맨
[2013.07.16 10:13:41]
코딩에서 처리할수 있따면 if 조건절로 if 파라미터 = null then ' where 관련 문장'
기존 sql + where 절 해서 넘기시는것도 방법..
by 풀텀
[2013.07.16 10:15:27]
코딩처리는 가능하나 쿼리로 가능할거 같아서 방법 구해보고있습니다^^
by DIIIN
[2013.07.16 10:13:44]
동적으로 만들어서 not null 인 경우는 where 절 붙이고, null 인 경우는 from 절에서 끝내면 되겠네요.
by 용근님
[2013.07.16 10:19:53]
mybatis라면 if 절을 쓰시면 되겠지만 동적Query는 Sql Injection에 취약하니
select * from dual where ((:req is null and 1=1) or (:req is not null nad name = 'test'))
이리 하면 되지 않겠습니까
by 용근님
[2013.07.16 10:23:28]
not null 컬럼이라면
WHERE name = decode ( :req, null, name, :req )
by 풀텀
[2013.07.16 10:25:08]
답변대로 해보았지만 제가 원한 결과가 안나오는군요. 제가 원한 결과는 where 절이 없는 전체 검색인데 제 설명이 부족했던거 같습니다. 죄송합니다.
파라미터가 NULL일때 NULL을 포함한 전체 검색이고, 파라미터가 있다면 해당 파라미터에 대한 결과값만 가져오는 쿼리를 작성하려고 합니다.
쿼리로만 해결해보려 하는데 막히는군요.
답변 감사드립니다.
by 용근님
[2013.07.16 10:40:53]
select * from dual where ((:req is null and 1=1) or (:req is not null and name = 'test'))
이게 원하는 결과가 안나왔다구요?
by 아발란체
[2013.07.16 10:26:15]
myBatis라면 이 방법도 있습니다.
<if test=”name != null”> name = 'test' </if>
by 마농
[2013.07.16 10:29:02]
name 이 Not Null 항목이라면? WHERE name LIKE :v_name || '%' WHERE name = NVL(:v_name, name) name 이 Not Null 항목이 아니라면? WHERE ( (:v_name IS NULL) OR (:v_name IS NOT NULL AND name = :v_name) )
by 풀텀
[2013.07.16 10:36:49]
마농님 감사합니다. 제가 원하는 결과가 나오네요.
by 미카엘
[2013.07.16 10:52:23]
with t as ( select 'aaa' name from dual union all select 'bbb' name from dual) select * from t where name = nvl2(:param, :param, name)
by 풀텀
[2013.07.16 11:11:20]
깔끔하고 간결하네요.
답변 감사합니다.^^
by 야신
[2013.07.16 20:33:11]
WHERE ( :v_name IS NULL OR name = :v_name)
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.