2016-09-21 13 views
0

TEMPLATESという表があり、html電子メールテンプレートがプレーンテキストとして格納されています。この表にはいくつかの列がありますが、気になる部分はテキストが格納されている列の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を参照する必要があります - マッチパターンの部分はカッコで囲まれています。おそらくあなたはかっこで囲まれていませんでしたか?または、あなたは+の代わりにかっこの外側に+(1つ以上の文字のために)を持っていたでしょうか? – mathguy