CREATE OR REPLACE FUNCTION OP_BPSBSC.FC_BPSSB_FML_TXT (
I_OUT_FML IN BPSSB_OPR_PLAN.OUT_FML%TYPE
)
RETURN VARCHAR2
IS
V_RETVAL BPSSB_OPR_PLAN.OUT_FML%TYPE := '';
V_CHR_CNT NUMBER := 0; --전체문자열 길이
V_CHR VARCHAR2(3) := NULL; --문자 하나 잘라서 받을 변수
TYPE T_ARRAY IS TABLE OF BPSSB_OPR_PLAN.OUT_FML%TYPE; --테이블 변수타입 선언
V_NUM_ARR T_ARRAY := T_ARRAY(); --테이블 변수 선언
V_TXT_ARR T_ARRAY := T_ARRAY(); --테이블 변수 선언
V_OUT_FML VARCHAR2(100) := '';
V_LCNT NUMBER := 0;
V_RVAL VARCHAR2(100) := '';
V_TMP VARCHAR2(100) := '';
V_RETURN VARCHAR2(100) := '';
BEGIN
IF I_OUT_FML <> '' OR I_OUT_FML IS NOT NULL THEN
V_OUT_FML := REPLACE(I_OUT_FML,',','');
V_CHR_CNT := LENGTH(V_OUT_FML);
FOR I IN 1..V_CHR_CNT LOOP
V_CHR := SUBSTR(V_OUT_FML,I,1) ;
V_NUM_ARR.EXTEND(1);
V_NUM_ARR(V_NUM_ARR.COUNT):= V_CHR;
END LOOP;
FOR K IN REVERSE V_NUM_ARR.FIRST .. V_NUM_ARR.LAST LOOP
IF FC_BPSSB_ISNUMBER(V_NUM_ARR(K)) = 1 THEN
V_LCNT := V_LCNT + 1;
IF MOD(V_LCNT,3) = 0 AND K < V_NUM_ARR.COUNT THEN
IF K > 1 AND FC_BPSSB_ISNUMBER(V_NUM_ARR(K-1)) = 1 THEN
V_RVAL := V_RVAL || V_NUM_ARR(K) || ',' ;
ELSE
V_RVAL := V_RVAL || V_NUM_ARR(K) ;
END IF;
ELSE
V_RVAL := V_RVAL || V_NUM_ARR(K) ;
END IF;
ELSE
V_LCNT := 0;
V_RVAL := V_RVAL || V_NUM_ARR(K) ;
END IF;
END LOOP;
V_CHR_CNT := LENGTH(V_RVAL);
FOR I IN 1..V_CHR_CNT LOOP
V_CHR := SUBSTR(V_RVAL,I,1) ;
V_TXT_ARR.EXTEND(1);
V_TXT_ARR(V_TXT_ARR.COUNT):= V_CHR;
END LOOP;
FOR K IN REVERSE V_TXT_ARR.FIRST .. V_TXT_ARR.LAST LOOP
V_RETURN := V_RETURN || V_TXT_ARR(K) ;
END LOOP;
ELSE
V_RETURN := '';
END IF;
RETURN V_RETURN;
EXCEPTION
WHEN OTHERS THEN
V_RETURN := I_OUT_FML;
END FC_BPSSB_FML_TXT;
'Drop Database' 카테고리의 다른 글
아카이브 로그 모드(Archive Log Mode) (0) | 2013.06.25 |
---|---|
ORA-00257: 아카이버 오류, (0) | 2013.06.25 |
오라클에서 ISNUMERIC 함수구현하기 (0) | 2013.03.16 |
오라클에서 중복데이터 제거하기 (0) | 2013.03.15 |
오라클 자바 클래스 호출 (0) | 2013.03.11 |