선언부(반환되는 데이터가 여러개일 경우)
CREATE OR REPLACE FUNCTION USER.FUNCTION_NAME (
/* 함수 호출 시 받은 인자 */
P_LIST VARCHAR2,
P_DEL VARCHAR2
) RETURN SPLIT_TBL PIPELINED
IS
/* 함수에서 사용할 지역 변수 */
L_IDX PLS_INTEGER;
L_LIST VARCHAR2(1000) := P_LIST;
L_VALUE VARCHAR2(1000);
- PipelinedTable 함수를 사용해서 건별로 처리 후 추출
실행부
BEGIN
LOOP
L_IDX := INSTR(L_LIST,P_DEL);
IF L_IDX > 0 THEN
PIPE ROW(SUBSTR(L_LIST,1,L_IDX-1));
L_LIST := SUBSTR(L_LIST,L_IDX+LENGTH(P_DEL));
ELSE
PIPE ROW(L_LIST);
EXIT;
END IF;
END LOOP;
RETURN;
END;
- P_LIST 문자열을 P_DEL 구분자로 split해서 추출 후 반환
반환 타입
CREATE TYPE USER."SPLIT_TBL" AS TABLE OF VARCHAR2(1000);