我们有一个名为TEMPLATES
的表,它将html电子邮件模板存储为纯文本。此表中有许多列,但我们关心的是TEMPLATE
列,它是存储文本的位置。
我们最近更新了服务器使用的库,以便在将这些模板发送给用户之前对其进行解析。这些库使用变量的新语法
${varName}
我的问题是很多旧电子邮件模板都使用旧语法
@varName@
这些变量名称仅包含字母数字字符。我正在尝试使用REGEXP_REPLACE用新的@whateverVariable@
语法替换旧${whateverVariable}
语法的变量的所有实例,但是当我进行替换时,我很难保留变量名。这可能吗?有更好的方法吗?
我应该提一下,如果这会产生影响,那么该列就是CLOB。
答案 0 :(得分:1)
CLOB的不同之处在于REGEXP_REPLACE会将模板截断为32k个字符 - 你的模板是否比那个更长?
无论如何,这是一种方法。请注意,如果实际上您的变量名称可能包含非字母数字字符(例如连字符),则无法在不进行修改的情况下工作。
with
inputs ( email_tmpl ) as (
select 'Dear @mrmrs@ @fname@, ...whatever' from dual
)
select regexp_replace(email_tmpl, '@([[:alnum:]]+)@', '${\1}') as new_tmpl
from inputs
;
NEW_TMPL
-----------------------------------
Dear ${mrmrs} ${fname}, ...whatever
1 row selected.