我的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.
任何人都可以帮我这个吗?提前致谢
答案 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