You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Oracle查询从表的XMLDATA列提取XML值

问题解决

你的查询无法运行的核心问题是XML路径表达式错误:

在你的XML数据里,INVOICE_NUMBER是PAYMENT_HISTORY_ROW的子元素(标签),而不是属性。但你在XMLTABLE的COLUMNS定义里用了PATH '@INVOICE_NUMBER'(@符号用于定位属性),这就导致找不到对应的数据。

另外,如果你的XMLDATA列是CLOB类型,还需要用XMLTYPE()函数把它转换成XML类型再传入XMLTABLE。

修正后的查询语句

WITH inv AS
(
  SELECT xt2.INVOICE_NUMBER,
         t.ID
  FROM xx_xml_data_table t,
       XMLTABLE('/COLLECTIONSET/COLLECTION/PAYMENT_HISTORY/PAYMENT_HISTORY_ROW' 
                PASSING XMLTYPE(t.XMLDATA)
                COLUMNS 
                  INVOICE_NUMBER VARCHAR2(40) PATH 'INVOICE_NUMBER'
       ) xt2
  WHERE t.XML_REQUEST_ID IN (11386,11387)
)
SELECT * FROM inv;

关键修正点

  1. 去掉PATH里的@符号:把@INVOICE_NUMBER改成INVOICE_NUMBER,匹配XML中的子元素节点。
  2. (可选但建议)如果XMLDATA是CLOB类型,用XMLTYPE(t.XMLDATA)转换为XML类型,确保XMLTABLE能正确解析。

执行这个查询后,就能得到你期望的结果:

IDINVOICE_NUMBER
1inv0001
1inv0002
2inv4001
2inv4002

内容的提问来源于stack exchange,提问作者Karun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 18:10:31