Я использую 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
.
Есть ли лучший способ сделать это?