首页 > 解决方案 > Oracle XML 需要 2 行数据值,而不是 1 行 XMLTYPE

问题描述

我对 Oracle XML 很陌生,正在尝试检索 2 行 4 列的车辆数据。

SQL:

select extract(xml, 'VEHICLES/VEHICLE/NUM_VEHICLE') as NUM_VEHICLE,
       extract(xml, 'VEHICLES/VEHICLE/NUM_YEAR') as NUM_YEAR,
       extract(xml, 'VEHICLES/VEHICLE/DES_PLATE') as DES_PLATE,
       extract(xml, 'VEHICLES/VEHICLE/CDE_STATE') as CDE_STATE
  from XML_TAB_HISTORY t
 where t.id = 7

XML:

<VEHICLES>
  <VEHICLE>
    <NUM_VEHICLE>1</NUM_VEHICLE>
    <NUM_YEAR>2011</NUM_YEAR>
    <DES_PLATE>ABC123</DES_PLATE>
    <CDE_STATE>NJ</CDE_STATE>
  </VEHICLE>
  <VEHICLE>
    <NUM_VEHICLE>2</NUM_VEHICLE>
    <NUM_YEAR>2012</NUM_YEAR>
    <DES_PLATE>XYZ987</DES_PLATE>
    <CDE_STATE>NJ</CDE_STATE>
  </VEHICLE>
</VEHICLES>

我得到 1 行 4 个 XMLTYPE:

<NUM_VEHICLE>1</NUM_VEHICLE>
<NUM_VEHICLE>2</NUM_VEHICLE>

<NUM_YEAR>2011</NUM_YEAR>
<NUM_YEAR>2012</NUM_YEAR>

<DES_PLATE>ABC123</DES_PLATE>
<DES_PLATE>XYZ987</DES_PLATE>

<CDE_STATE>NJ</CDE_STATE>
<CDE_STATE>NJ</CDE_STATE>

我想得到的只是两行值:

NUM_VEHICLE  NUM_YEAR  DES_PLATE  CDE_STATE
-----------  --------  ---------  ---------
1            2011      ABC123     NJ
2            2012      XYZ987     NJ

我尝试在 SQL 中使用“extractvalue”代替 extract,但收到此错误:ORA-19025: EXTRACTVALUE 返回值仅一个节点

提前感谢您提供正确方向的任何建议或指示。

安德鲁

标签: sqlxmloracle

解决方案


extract和都已弃用extractvalue,因此您应该使用xmlqueryand,在这种情况下,xmltable

select num_vehicle, num_year, des_plate, cde_state
from xml_tab_history t
cross apply xmltable (
  '/VEHICLES/VEHICLE'
  passing t.xml
  columns num_vehicle number path 'NUM_VEHICLE',
    num_year number path 'NUM_YEAR',
    des_plate varchar2(6) path 'DES_PLATE',
    cde_state varchar2(2) path 'CDE_STATE'
) x
where t.id = 7
NUM_VEHICLE NUM_YEAR DES_PLATE CDE_STATE
----------- -------- --------- ---------
          1     2011 ABC123    NJ       
          2     2012 XYZ987    NJ       

db<>小提琴

阅读有关当前 SQL/XML 函数的更多信息。


推荐阅读