在oracle中更新变量语法

时间:2016-09-21 17:48:10

标签: oracle replace regexp-replace

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

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

${varName}

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

@varName@

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

我应该提一下,如果这会产生影响,那么该列就是CLOB。

1 个答案:

答案 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.