IN조건을 function으로 1,2,3...n건사용 0 1 513

by 오란씨 [Oracle 기초] [2020.12.24 11:43:31]


오라클에서

IN ('1', '2', '3')

이것을

IN(펑션) 으로 사용이 가능할까요

펑션을 이용해 스트링으로 '1', '2', '3'이렇게 가져오려 합니다

 

스트링이 안먹네요 ㅠㅠ

by 마농 [2020.12.24 12:27:07]

함수의 리턴은 오직 1개의 값입니다.
IN 절에 넣어 봐야 긴 스트링과 비교하는 꼴입니다. 예) WHERE '1' = '1,2,3'
여러 대안을 찾아보셔야 합니다.
1. 다중행을 반환하는 함수를 만들던지. - http://gurubee.net/article/11403
2. 굳이 함수를 써야 하는지? 서브쿼리로 변환할 수는 없는지?
3. IN 이 아닌 문자열 비교 방식 사용
- 함수 결과엔 따옴표 제거
- WHERE INSTR(','||함수()||',', ','||컬럼||',') > 0
- 단, 인덱스 활용이 어려울 수 있음.
4. 함수의 결과를 다시 스플릿 하는 쿼리 구현
- 함수 결과엔 따옴표 제거
- WHERE 컬럼 IN (
SELECT REGEXP_SUBSTR(v, '[^,]+', 1, LEVEL)
FROM (SELECT 함수() v FROM dual)
CONNECT BY LEVEL <= REGEXP_COUNT(v, '[^,]+')
)
- 다만 이렇게까지 하려면 그냥 2번 방안이 낫지 않은지?

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