Java ORA-19112:使用XMLTABLE将逗号分隔的字符串转换为行时,在求值期间出错

Java ORA-19112:使用XMLTABLE将逗号分隔的字符串转换为行时,在求值期间出错,java,sql,oracle,xmltable,Java,Sql,Oracle,Xmltable,我正在尝试使用oracle中的XMLTABLE函数将逗号分隔的字符串拆分为行。 e、 g 上面的查询工作正常。但当传递带&的字符串时,它抛出异常作为 java.sql.SQLException:ORA-19112:评估期间引发的错误: 请注意,这个查询是通过prepared语句从java执行的。我想问题出在XML内部 快速解决方法是使用“替换”来替换特殊字符: WITH MYTABLE AS (SELECT '"AB","P & Q","XY"' TEXT FROM DUAL

我正在尝试使用oracle中的XMLTABLE函数将逗号分隔的字符串拆分为行。 e、 g

上面的查询工作正常。但当传递带&的字符串时,它抛出异常作为

java.sql.SQLException:ORA-19112:评估期间引发的错误:


请注意,这个查询是通过prepared语句从java执行的。

我想问题出在XML内部

快速解决方法是使用“替换”来替换特殊字符:

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;'));

问题在于XQuery表达式的计算

您可以使用REGEXP\u SUBSTR

看看这个

工作演示:


是的,但是它和java有什么关系呢?我指定它是因为我不想让你考虑像SET OFF OFF这样的选项。引发逃逸;设置扫描关闭;回答的时候
 WITH MYTABLE AS
  (SELECT '"AB","P & Q","XY"' TEXT FROM DUAL
  )
SELECT REPLACE((column_value).GETSTRINGVAL(),'"','') "OPTION_TEXT"
FROM MYTABLE,
  XMLTABLE(TEXT);
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;'));
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"