728x90
AND EXISTS ( SELECT 1
FROM TABLE(FN_CLOB_SPLIT(
TO_CLOB('1102110,1102112,1102115')
)) S
WHERE S.COLUMN_VALUE = STORE_CD )
FN_CLOB_SPLIT - 문자열(CLOB)을 넘겨 각각의 로우 데이터를 반환하고 그것이 존재하는지 찾는다.
create or replace FUNCTION FN_CLOB_SPLIT (
P_LIST IN CLOB
, P_GUBUN IN VARCHAR2 DEFAULT ','
) RETURN SPLIT_TBL PIPELINED
AS
/* EXCEPTIONS */
NONEEXISTENT_LOB_VALUE EXCEPTION;
PRAGMA EXCEPTION_INIT(NONEEXISTENT_LOB_VALUE, -22922);
N_ST_INDEX NUMBER := 1;
N_END_INDEX NUMBER;
N_RANK NUMBER := 1;
BEGIN
IF P_LIST IS NULL THEN
RETURN;
END IF;
LOOP
EXIT WHEN N_END_INDEX = 0;
N_END_INDEX := INSTR( P_LIST, P_GUBUN, 1, N_RANK);
PIPE ROW(TRIM(SUBSTR(P_LIST, N_ST_INDEX, CASE WHEN N_END_INDEX > 0 THEN N_END_INDEX - N_ST_INDEX ELSE LENGTH(P_LIST) - N_ST_INDEX + 1 END)));
N_ST_INDEX := N_END_INDEX + LENGTH(P_GUBUN);
N_RANK := N_RANK + 1;
END LOOP;
RETURN;
EXCEPTION WHEN NONEEXISTENT_LOB_VALUE THEN RETURN;
END;
문자열에서 ,를 기준으로 나눠 여러행의 데이터로 만들어 리턴한다.
'ORACLE SQL' 카테고리의 다른 글
피벗 쿼리를 작성해보자 (PIVOT TABLE QUERY) (0) | 2023.07.31 |
---|---|
ORACLE SELECT UPDATE 각각의 Key값에 각기 다른 값 SET 하기 (0) | 2023.07.11 |
LISTAGG 문자열 연결의 결과가 너무 깁니다 에러 발생시 (0) | 2022.06.15 |
java에서 ibatis 프로시져 호출(실행) (0) | 2021.12.24 |
프로시저를 워크시트에서 돌려보자 (0) | 2021.04.22 |