파라미터값에 대한 IN 처리 0 6 1,508

by 마늘장아찌 [SQL Query] [2017.07.28 16:48:01]


WITH t1 AS
 (SELECT 'A' cd, 10 qty FROM dual UNION ALL
  SELECT 'B' cd, 5 qty FROM dual UNION ALL
  SELECT 'C' cd, 4 qty FROM dual UNION ALL
  SELECT 'D' cd, 3 qty FROM dual)
 SELECT *
 FROM t1
  WHERE cd = NVL(&p_cd, cd)

 

&p_cd : 파라미터 변수

파라미터에 값이 없을 경우에는 전체 조건으로 처리되면 되나

값을 하나 또는 그이상 Dynamic하게 받게 되면 받은 값에 대하여 IN으로 처리되도록 하고 싶습니다.

A를 받을수도 있고 AC, ABC등을 받을수도 있는데 그에 따라 처리가 가능할까요? delimeter가 필요하면 넣을수도 있습니다.

 

 

 

by jkson [2017.07.28 17:01:43]

1.cd 컬럼이 인덱스 컬럼인가요?

2.null을 허용하는 컬럼인가요?


by 마늘장아찌 [2017.07.28 17:05:49]

정보가 충분치 않아서 죄송합니다.

PK 컬럼에 포함되어있으며 NOT NULL 컬럼입니다.


by 우리집아찌 [2017.07.28 17:04:07]

행복제 이용해서 변수(구분자는 있어야함) 를 인라인뷰로 만들어서 조인 

쿼리는 다른분들이 ㅋㅋ


by jkson [2017.07.28 17:06:11]

일단 인덱스를 사용하지 않는 컬럼이라 가정하고 간단하게..

파라메터 값을  ',A,B,C,' 이런 형태로 주시고

(instr(&p_cd,','||cd||',') > 0 or &p_cd is null)

 


by 우리집아찌 [2017.07.28 17:24:33]

select regexp_substr('a,b,c','[^,]+' , 1 , level ) cd

    from dual connect by level <= regexp_count('a,b,c',',')  + 1


by jkson [2017.07.28 17:45:27]

인덱스 있는 컬럼일 때는 아찌님 쿼리 활용하세요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입