문장에 있는 %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("")}