2016-09-21 2 views
0

html 전자 메일 템플리트를 일반 텍스트로 저장하는 TEMPLATES 테이블이 있습니다. 이 표에는 많은 열이 있지만 신경 쓰이는 부분은 텍스트가 저장된 곳의 TEMPLATE 열입니다.oracle의 변수 구문 업데이트

우리는 최근에 서버에 사용 된 라이브러리를 업데이트하여 사용자에게 전송하기 전에 이러한 템플릿을 구문 분석했습니다. 이 라이브러리는 내 문제가 된 이메일 템플릿의 많은 이들 변수 이름은 영숫자 문자가 포함 된 구문을

@[email protected] 

을 사용하는 것입니다 변수

${varName} 

을위한 새로운 구문을 사용합니다. 새로운 ${whateverVariable} 구문으로 이전 @[email protected] 구문을 사용하여 변수의 모든 인스턴스를 바꾸려면 REGEXP_REPLACE를 사용하려고하지만 대체 할 때 변수 이름을 유지하는 데 어려움이 있습니다. 이것이 가능한가? 이 작업을 수행하는 더 좋은 방법이 있습니까?

그 차이가 나는 경우 열을 CLOB이라고 언급해야합니다.

답변

1

CLOB는 REGEXP_REPLACE가 템플릿을 32k 문자로 자르면 효과가 있습니다. 템플릿이 이보다 더 오래 걸립니까?

어쨌든, 여기에 한 가지 방법이 있습니다. 실제로 변수 이름에 영숫자가 아닌 문자 (예 : 하이픈)가 포함되어 있으면 수정하지 않고 작동하지 않습니다.

with 
    inputs (email_tmpl) as (
     select 'Dear @[email protected] @[email protected], ...whatever' from dual 
    ) 
select regexp_replace(email_tmpl, '@([[:alnum:]]+)@', '${\1}') as new_tmpl 
from inputs 
; 


NEW_TMPL 
----------------------------------- 
Dear ${mrmrs} ${fname}, ...whatever 

1 row selected. 
+0

내가 뭘 잘못했는지 잘 모르겠다. –

+0

@LeeAbraham - 귀하의 게시물에서 변수 이름을 보존하는 데 어려움이 있다고하셨습니다. 이것이 '\ 1'의 역 참조입니다. SUBEXPRESSION (괄호로 묶인 일치 패턴의 일부)을 다시 참조해야합니다. 아마도 당신은 그것을 괄호 안에 넣지 않았을 것입니까? 아니면 안쪽에 괄호 밖의 + 문자 (한 개 이상의 문자)가 있습니까? – mathguy