함수의 리턴은 오직 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번 방안이 낫지 않은지?