ORA-19112:使用XMLTABLE将逗号分隔的字符串转换为行时评估期间出错

时间:2015-12-08 07:37:20

标签: java sql oracle xmltable

我正在尝试使用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执行的。

2 个答案:

答案 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, '&', '&#38;'), '<', '&lt;'), '>', '&gt;'));

SqlFiddleDemo