【发布时间】:2019-08-19 10:27:31
【问题描述】:
我正在使用 Xmltable 将逗号分隔的电子邮件地址字段转换为值表。
WITH
data AS
(
select 1 ID, 'foo&bar@domain.tld,bar@domain.tld' recipients from dual
)
select ID, trim(COLUMN_VALUE) recipient
from data,xmltable(('"'|| REPLACE( recipients , ',', '","') || '"'))
产生错误:
[72000][19112] ORA-19112:评估期间出现错误:XVM-01003: [XPST0003] '"foo' 1 处的语法错误 "foo&bar@domain.tld","bar@domain.tld" - ^
但是,当我将 & 替换为其实体值 (&) 时:
WITH
DATA AS
(
select 1 ID, 'foo&bar@domain.tld,bar@domain.tld' recipients from dual
)
select ID
-- & --> &
, replace( trim(COLUMN_VALUE), '&', '&') recipient
from data
-- & --> &
,xmltable(('"'|| REPLACE( replace( recipients, '&','&') , ',', '","') || '"'))
查询有效:
ID,RECIPIENT
1,foo&bar@domain.tld
1,bar@domain.tld
我在想,电子邮件地址中可能还有其他有效字符,但对于 Xmltable 会出现问题。
有没有更好的方法来做到这一点?
【问题讨论】:
-
既然您询问了更好的方法,还有许多其他选项可以将 CSV 拆分为表格。我最喜欢的是 MT0 在这个问题上的 CTE:stackoverflow.com/questions/38371989/… 如果您使用正则表达式,请注意 null 问题。 stackoverflow.com/questions/25648653/…
标签: sql oracle oracle12c xmltable