我正在尝试使用oracle中的XMLTABLE函数将逗号分隔的字符串拆分为行。 e.g。
WITH MYTABLE AS
(SELECT '"AB","PQ","XY"' TEXT FROM DUAL
)
SELECT REPLACE((column_value).GETSTRINGVAL(),'"','') "OPTION_TEXT"
FROM MYTABLE,
XMLTABLE(TEXT);
上面的查询工作正常。但当字符串与&传递后,它会抛出异常
java.sql.SQLException:ORA-19112:评估期间出错:
WITH MYTABLE AS
(SELECT '"AB","P & Q","XY"' TEXT FROM DUAL
)
SELECT REPLACE((column_value).GETSTRINGVAL(),'"','') "OPTION_TEXT"
FROM MYTABLE,
XMLTABLE(TEXT);
请注意,此查询是通过预准备语句从java执行的。
答案 0 :(得分:1)
问题在于评估XQuery表达式。
你可以split the comma delimited string into rows使用 REGEXP_SUBSTR 。
查看此SQL Fiddle
工作演示:
SQL> WITH mytable AS
2 (SELECT '"AB","P & Q","XY"' TEXT FROM DUAL
3 )
4 SELECT trim(regexp_substr(TEXT, '[^,]+', 1, LEVEL)) TEXT
5 FROM mytable
6 CONNECT BY LEVEL <= regexp_count(TEXT, ',')+1;
TEXT
-----------------
"AB"
"P & Q"
"XY"
答案 1 :(得分:0)
我想问题出在XML内的special characters。
快速(可能很脏)的解决方法是使用REPLACE
替换特殊字符:
WITH MYTABLE AS
(SELECT '"AB","P & Q","XY"' TEXT FROM DUAL
)
SELECT REPLACE(extractValue(column_value,'/text()'),'"','') "OPTION_TEXT"
FROM MYTABLE,
XMLTABLE(REPLACE(REPLACE(REPLACE(TEXT, '&', '&'), '<', '<'), '>', '>'));
的 SqlFiddleDemo
强>