2013. 2. 20. 10:23
오라클 split 함수
2013. 2. 20. 10:23 in -=-= 컴퓨터 =-=-/Database
CREATE OR REPLACE FUNCTION FN_GET_SPLIT( IN_STR IN VARCHAR2, IN_LEVEL IN INT, IN_DELIMETER IN VARCHAR2, IN_DEFAULT_VAL IN VARCHAR2 ) RETURN VARCHAR2 IS V_RETURN VARCHAR2(200); STRVALUE VARCHAR2(4000) := IN_STR; DEFAULT_RETURN_VAL VARCHAR2(4000) := IN_DEFAULT_VAL; IDX INT; ILEVEL INT := 0; BEGIN V_RETURN := ''; -- 문자열이 없으면 기본 리턴값 반환 후 종료 IF NVL(STRVALUE,'NO_STRING') = 'NO_STRING' THEN RETURN DEFAULT_RETURN_VAL; END IF; LOOP --구분자 인덱스 확인 IDX := INSTR(STRVALUE, IN_DELIMETER); IF IDX > 0 THEN --구분자로 문자를 찾은경우 ILEVEL := ILEVEL + 1; -- 현재 레벨이 원하는 레벨이면 현재 문자열 반환 AND 레벨이 -1인경우는 마지막까지 LOOP IF ILEVEL = IN_LEVEL AND IN_LEVEL != -1 THEN V_RETURN := SUBSTR(STRVALUE, 1, IDX-1); EXIT; END IF; STRVALUE := SUBSTR(STRVALUE, IDX + LENGTH(IN_DELIMETER)); ELSE -- 구분자가 없을 경우, 문자열을 그대로 반환 IF ILEVEL = 0 THEN --구분자가 포함이 안되었지만 레벨이 1인경우 문자 그대로 반환 IF IN_LEVEL = 1 THEN V_RETURN := STRVALUE; ELSE V_RETURN := ''; END IF; ELSE -- 마지막 문자열일 경우 ILEVEL := ILEVEL + 1; -- 마지막을 원하는 경우 마지막 문자열 반환 / -1은 레벨을 모를경우 구분자의 마지막 문자열 반환 IF ILEVEL = IN_LEVEL OR IN_LEVEL = -1 THEN V_RETURN := STRVALUE; ELSE -- 원하는 레벨의 값이 없을 경우, 공백 반환 V_RETURN := ''; END IF; END IF; EXIT; --반복 탈출문 END IF; END LOOP; --최종결과 리턴 RETURN NVL(V_RETURN, DEFAULT_RETURN_VAL); EXCEPTION WHEN OTHERS THEN RETURN SQLERRM; END FN_GET_SPLIT;
'-=-= 컴퓨터 =-=- > Database' 카테고리의 다른 글
[오라클 / PL-SQL] 오라클 예외처리 및 기본 예제 (0) | 2014.02.17 |
---|---|
java.sql.SQLException: 논리적 핸들이 더 이상 유효하지 않습니다 (0) | 2013.03.11 |
오라클 connect by 예제 (0) | 2012.10.31 |
오라클 리스너 로그 설정 해제 (0) | 2012.05.25 |
[오류] PLS-00215: String length constraints must be in range (1 .. 32767) (0) | 2012.05.09 |