SMALL
Oracle Replace 함수 생성(결과값 변환 출력)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | CREATE OR REPLACE FUNCTION FN_REPLACE_CUST( IN_VALUES IN VARCHAR2, IN_TYPE IN INT , IN_DELIMETER IN VARCHAR2 ) RETURN VARCHAR2 /************************************************************************** # FN : FN_REPLACE_CUST # 옵션 IN_VALUES : 분리할 문자열 입력 IN_TYPE : 출력값 구분자(코드, 코드명) IN_DELIMITER : 분리할 구분자 **************************************************************************/ IS RETURN_VAL VARCHAR2(2000); -- 결과 리턴 변수 TMP_RET_VALUE VARCHAR2(2000); -- 결과 임시 저장 변수 SET_CODE VARCHAR2(2000); -- SELECT 결과 코드 저장 SET_CODE_NAME VARCHAR2(2000); -- SELECT 결과 코드명 저장 BEGIN -- IN_VALUES의 값이 없으면 빈 값을 리턴하고 종료 IF LENGTH(LTRIM(RTRIM(IN_VALUES))) = 0 THEN RETURN '' ; END IF; FOR ForResult IN ( WITH T AS ( SELECT IN_VALUES AS SET_VALUES FROM DUAL -- 입력받은 문자열 임시 테이블 처리 ) /* 문자열을 분리하여 세로로 추출 */ SELECT TRIM(REGEXP_SUBSTR(SET_VALUES, '[^' ||IN_DELIMETER|| ']+' , 1, LEVEL )) AS SET_VALUES FROM T CONNECT BY INSTR(SET_VALUES, '' ||IN_DELIMETER|| '' , 1, LEVEL - 1) > 0 ) LOOP /* COMMON_CODE 의 코드 값과 비교후 결과값 대입 */ SELECT CODE_M, CODE_M_NAME INTO SET_CODE, SET_CODE_NAME FROM COMMON_CODE WHERE CODE_L = '005' AND CODE_M = ForResult.SET_VALUES; /* # IN_TYPE 구분값에 따라 코드번호, 코드명 추출 */ IF IN_TYPE = 1 THEN TMP_RET_VALUE := SET_CODE; ELSIF IN_TYPE = 2 THEN TMP_RET_VALUE := SET_CODE_NAME; END IF; /* # 결과값 저장 : 결과값 가로 배치 */ IF RETURN_VAL IS NULL THEN RETURN_VAL := TMP_RET_VALUE; ELSE RETURN_VAL := RETURN_VAL|| ',' ||TMP_RET_VALUE; END IF; END LOOP; RETURN RETURN_VAL; -- 결과 리턴 EXCEPTION WHEN OTHERS THEN -- RETURN SQLERRM; RETURN IN_VALUES; -- 에러 또는 조인 결과값 없을시 기본 입력받은 값 리턴 END FN_REPLACE_CUST; / |
> 생성후 조회
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | -- # IN_TYPE : 1 SELECT ORG_TYPE, FN_REPLACE_CUST(ORG_TYPE, 1, '|' ) AS REPLACE_VALUES FROM USER_INFO ; ORG_TYPE REPLACE_VALUES -------------------------------------------- 101|102|103|104 101,102,103,104 -- # IN_TYPE : 2 SELECT ORG_TYPE, FN_REPLACE_CUST(ORG_TYPE, 2, '|' ) AS REPLACE_VALUES FROM USER_INFO ; ORG_TYPE REPLACE_VALUES -------------------------------------------- 101|102|103|104 가수,작곡가,작사가,기타
|
LIST
'ORACLE' 카테고리의 다른 글
oracle replace 입니다 리플레이스 (0) | 2018.10.01 |
---|---|
ORACLE "% "퍼센트 구하기 자료 (0) | 2018.10.01 |
트리거 리스트 출력하기, 트리거 비활성화,삭제,활성화 (0) | 2018.03.20 |
데이터삭제시 에러 , 자식코드가 발견 되었습니다 (0) | 2018.03.20 |
oracle , toad ORA-01861: 리터럴이 형식 문자열과 일치하지 않음 (0) | 2018.03.12 |