문장에 있는 %ABC% 를 freemarker 형식인 ${abc?default("")} 으로 치환하기.
REGEXP_REPLACE(P_PARAM, '%([A-Z_]+)%', LOWER('${\1?default("")}'))
위 정규식 치환구문처럼 하면 LOWER적용이 안된다.
그래서 아래 소스 처럼 LOOP를 돌면서 처리한다.
DECLARE
P_PARAM VARCHAR2(256) := '담당자 ID : %USR_ID%, 담당자 이름 : %USR_NM%, 귀사(%VD_NM%)의 번청을 기원합니다. %USR_ID%';
P_BF_PATTERN VARCHAR2(256) := '%([A-Z_]+)%';
P_AF_PATTERN VARCHAR2(256) := '${\1?default("")}';
CNT INTEGER := 0;
I INTEGER := 0;
BEGIN
SELECT REGEXP_COUNT(P_PARAM, P_BF_PATTERN)
INTO CNT
FROM DUAL;
WHILE I < CNT LOOP
I := I + 1;
-- REGEXP_REPLACE(P_PARAM, T.BF_STR, LOWER(T.AF_STR)) 이렇게 하면 중복된건 한번에 Replace한다.
-- 아래처럼하면 중복된 키워드가 있다하더라도 하나씩 Replace한다.
SELECT REGEXP_REPLACE(P_PARAM, T.BF_STR, LOWER(T.AF_STR), 1, 1)
INTO P_PARAM
FROM (SELECT T.BF_STR
, REGEXP_REPLACE(T.BF_STR, P_BF_PATTERN, P_AF_PATTERN) AS AF_STR
FROM (SELECT REGEXP_SUBSTR(P_PARAM, P_BF_PATTERN, 1, 1) AS BF_STR
FROM DUAL) T
) T;
DBMS_OUTPUT.PUT_LINE(P_PARAM);
END LOOP;
END;
담당자 ID : %USR_ID%, 담당자 이름 : %USR_NM%, 귀사(%VD_NM%)의 번청을 기원합니다. %USR_ID%
담당자 ID : ${usr_id?default("")}, 담당자 이름 : %USR_NM%, 귀사(%VD_NM%)의 번청을 기원합니다. %USR_ID%
담당자 ID : ${usr_id?default("")}, 담당자 이름 : ${usr_nm?default("")}, 귀사(%VD_NM%)의 번청을 기원합니다. %USR_ID%
담당자 ID : ${usr_id?default("")}, 담당자 이름 : ${usr_nm?default("")}, 귀사(${vd_nm?default("")})의 번청을 기원합니다. %USR_ID%
담당자 ID : ${usr_id?default("")}, 담당자 이름 : ${usr_nm?default("")}, 귀사(${vd_nm?default("")})의 번청을 기원합니다. ${usr_id?default("")}