在oracle中更新变量语法

Updating variable syntax in oracle

我们有一个名为 TEMPLATES 的 table,它将 html 电子邮件模板存储为纯文本。此 table 中有许多列,但我们关心的是存储文本的 TEMPLATE 列。

我们最近更新了服务器用来在将这些模板发送给用户之前对其进行解析的库。这些库对变量使用新语法

${varName}

我的问题是很多旧电子邮件模板使用旧语法

@varName@

这些变量名称仅包含字母数字字符。我正在尝试使用 REGEXP_REPLACE 将旧 @whateverVariable@ 语法的变量的所有实例替换为新的 ${whateverVariable} 语法,但是当我执行替换。这可能吗?有更好的方法吗?

我可能应该提到该列是一个 CLOB,如果有区别的话。

CLOB 的不同之处在于 REGEXP_REPLACE 会将模板截断为 32k 个字符 - 您的模板是否比这更长?

无论如何,这是一种方法。请注意,如果您的变量名实际上可能包含非字母数字字符(例如连字符),则不进行修改将无法工作。

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


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

1 row selected.