dic 테이블에 있는 한글명에 매칭되는 영문명으로 REPLACE 시키는 함수입니다,,
하나 만들어서 다방면으로 써먹고 있는 함수 입니다..
지난번에는 공백제거 하는걸 고민하다 물었었는데
요번엔,, 매칭되지 않는 경우는 Null로 해야 해서 이것저것 해보다가 질문드립니다..
=> IF 문 넣어서 일부 해결은 되었네요, 하지만...
CREATE OR REPLACE FUNCTION F_RP_DIC(v VARCHAR2)
RETURN VARCHAR2
IS
vRtn VARCHAR2(100) := v;
BEGIN
FOR c IN (SELECT * FROM &V_ENG_DIC WHERE Type_name in ('IC명', 'JC명', 'TG명', '고가명', '고속도로명', '교량명', '전용도로명', '지하차도명', '터널명') ORDER BY length(kor_name) DESC )
LOOP
vRtn := REPLACE(vRtn, c.Kor_name, c.Eng_name);
END LOOP;
IF v = vRtn THEN
RETURN NULL;
END IF;
RETURN TRIM(vRtn);
END;
--eng_dic 테이블 예시
--KOR_NAME ENG_NAME
--송청제2교 Songcheong 2nd Bridge
--정림교 Jeongnim Bridge
--천미교 Cheonmi Bridge
--다리 (Bridge)
--복교 Bok Bridge
WITH t AS
(
SELECT '청평2교' name FROM dual
UNION ALL SELECT '덕전교' FROM dual
UNION ALL SELECT '송청제2교' FROM dual
UNION ALL SELECT '정림교' FROM dual
UNION ALL SELECT '천미교' FROM dual
UNION ALL SELECT '꽃골다리' FROM dual
UNION ALL SELECT '신복교' FROM dual
)
SELECT
name
,F_RP_DIC(name)
FROM t
;
-- 결과
NAME F_RP_POI_DIC(NAME)
청평2교 청평2교
덕전교 덕전교
송청제2교 Songcheong 2nd Bridge
정림교 Jeongnim Bridge
천미교 Cheonmi Bridge
꽃골다리 꽃골(Bridge)
신복교 신Bok Bridge
지금 저 결과로는 Dic에 없는 경우 그냥 한글명이 나오는데,
매칭되지 않는 경우 Null로 하려면 어떻게 해야 하나요..
추가) 일부만 매칭되는것도 비매칭이라고 할수 있으니, 그것도 Null이 되어야 합니다 ㅜㅜ
게시판 찾아보고 꼼수(?)를 써서 한글인 경우를 null로 해보려 했더니 결과가 더 이상하게 나오기만 하네요;;
--,REGEXP_REPLACE(F_RP_DIC(name), '[ㄱ-힣]', null)
--,REGEXP_REPLACE(F_RP_DIC(name), '([0-9]|[^ -~])', null)