문자열 형태의 파라미터를 프로시저에서 IN조건으로 검색 가능할까요? 0 2 4,246

by 꼬막 [PL/SQL] Oracle [2021.10.25 16:46:45]


오라클 프로시저 호출 시 

call SP('|CODE1|CODE2|CODE3');

위와같이 '|'로 구분하여 하나의 문자열로 파라미터를 넘기게되는데요, 

프로시저상에서 해당 파라미터를 가지고

select Query에서 조건절에 

WHERE CODE IN (param1) 이런형태로 핸들링 할 수 있을까요??

by 마농 [2021.10.25 17:43:22]

IN (param1) 형태는 구문 오류는 안나겠지만 의미상으로는 틀린 조건입니다.
1. IN (param1 을 split 하여 리스트로 출력하는 Select 구문) 형태로 푸는 방안
2. IN 조건이 아닌 문자열 비교 방식으로 푸는 방안
 

-- 1. 구분자로 분리
SELECT *
  FROM test
 WHERE code IN (SELECT REGEXP_SUBSTR(param1, '[^|]+', 1, LEVEL)
                  FROM dual
                 CONNECT BY LEVEL <= REGEXP_COUNT(param1, '[^|]+')
                )
;
-- 2. 문자열 비교
SELECT *
  FROM test
 WHERE INSTR(param1||'|', '|'||code||'|') > 0
;

 


by 꼬막 [2021.10.25 18:34:22]

감사합니다 마농님! 잘 참고하겠습니다! 감사합니다~

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