프로시저의 매개변수 값으로 분리자로 처리된 값이 들어온 경우에
스플릿으로 잘라낸 후 배열처럼 사용하는 방법.
CREATE OR REPLACE PROCEDURE SP_ARRAY_TEST
(
PIN_EXEC_DATA IN NVARCHAR2
)
IS
vExecDataArr SPLIT_ROW;
vExecRowArr SPLIT_ROW;
VCnt INTEGER := 0;
V_USER_DEF_EXP EXCEPTION;
BEGIN
SELECT F_SPLIT(PIN_EXEC_DATA,'^') INTO vExecDataArr FROM DUAL;
FOR IDX IN vExecDataArr.FIRST .. vExecDataArr.LAST LOOP
IF vExecDataArr(IDX) IS NULL THEN
GOTO END_LOOP;
END IF;
SELECT F_SPLIT(vExecDataArr(IDX),'|') INTO vExecRowArr FROM DUAL;
IF 4 != vExecRowArr.COUNT THEN
POUT_RESULT_MSG := '정보가 부정확합니다[' || vExecDataArr(IDX) || '].';
RAISE V_USER_DEF_EXP;
END IF;
vCnt := vCnt + 1;
INSERT INTO [TABLE_NAME]
(
COL1,
COL2,
COL3,
COL4,
COL5
)
VALUES
(
VCnt,
vExecRowArr(0),
vExecRowArr(1),
vExecRowArr(2),
vExecRowArr(3)
);
<<END_LOOP>>
NULL;
END LOOP;
COMMIT;
EXCEPTION
WHEN V_USER_DEF_EXP THEN
ROLLBACK;
POUT_RESULT := 'E';
RAISE_APPLICATION_ERROR(-20001, POUT_RESULT_MSG);
WHEN OTHERS THEN
ROLLBACK;
POUT_RESULT := 'E';
POUT_RESULT_MSG := SQLCODE||':'||SQLERRM;
RAISE_APPLICATION_ERROR(-20002, POUT_RESULT_MSG);
END;
'ORACLE 이야기' 카테고리의 다른 글
Oracle Merge (0) | 2015.12.11 |
---|---|
Oracle DYNAMIC WHERE CLAUSE (0) | 2015.12.11 |
Oracle LISTAGG (0) | 2015.12.11 |
Oracle DB LINK (0) | 2015.12.11 |
IN 절 SPLIT 함수 튜닝 힌트 (0) | 2015.12.11 |