oracle sql - 用于提取xml值的xmltype无法正常工作

时间:2017-03-23 10:54:00

标签: sql xml oracle xmltype

我的clob字段中有以下xml:

<i>7894564</i>
<se>ABC</se>

我正在使用以下查询,但会产生错误:

select xmltype(clob_field).extract('//se/text()').getStringVal() from tablename

错误是:

ORA-31011: XML parsing failed
ORA-19213: error occurred in XML processing at lines 2
LPX-00245: extra data after end of document
ORA-06512: at "SYS.XMLTYPE", line 272
ORA-06512: at line 1
31011. 00000 -  "XML parsing failed"
*Cause:    XML parser returned an error while trying to parse the document.
*Action:   Check if the document to be parsed is valid.

任何人都可以帮我这个吗?提前致谢

2 个答案:

答案 0 :(得分:2)

您的问题是存储在CLOB中的内容不是XML文档,因为它缺少根节点。由于您正在扫描提取中的整个文档,因此可以将其包装在元素中以确保您只有1个根,此时您的XMLTYPE强制转换将起作用。

有点脏但是:

SELECT
  XMLTYPE('<ROOT>'||clob_field||'</ROOT>').EXTRACT('//se/text()').getStringVal()
FROM tablename

答案 1 :(得分:0)

试试这个:

这应该有效

  with xml_table
  as
  (
  select '<i>7894564</i>' xml_data from dual
  union
  select '<se>ABC</se>' xml_data from dual  
  )
  select xmltype(xml_data).extract('//se/text()').getStringVal() from xml_table