2013-05-09 3 views
1

oracle에서 동적 쿼리로 작업하고 있고 조건에서 where에 대한 문자열 매개 변수를 전달할 때 작동하지 않습니다.동적 쿼리가 작동하지 않는 매개 변수

for x in (
      SELECT DISTINCT column_id 
      FROM table 
      WHERE column_id in (in_column_ids)   
      /* WHERE column_id in (15,16,17) =>works */ 
      /* => in_column_ids is a varchar type which 
        holds comma separated value */ 
      and column_title=in_column_title /* works */ 
    ) 

여기에서 값을 해당 in_column_ids에 직접 저장하면 쿼리가 작동합니다. 그러나 매개 변수로 전달되는 값이 where in에 대해 작동하지 않는 것 같습니다.

아이디어가 있으십니까?

답변

2

IMO를 사용하려면 쉼표로 구분 된 변수를 regexp_substr으로 분할해야합니다. 귀하의 질의는 다음과 같이해야합니다 :

for x in (
      SELECT DISTINCT column_id 
      FROM table 
      WHERE column_id in (
      SELECT DISTINCT regexp_substr(in_column_ids,'[^,]+', 1, LEVEL) FROM DUAL 
      CONNECT BY regexp_substr(in_column_ids, '[^,]+', 1, LEVEL) IS NOT NULL 
      )   
      /* WHERE column_id in (15,16,17) =>works */ 
      /* => in_column_ids is a varchar type which 
        holds comma separated value */ 
      and column_title=in_column_title /* works */ 
    ) 

확인 SQLFIDDLE DEMO