Oracle xml实践

本文主要探讨Oracle数据库中XMLType字段的操作及XMLTABLE函数的应用,详细讲解了如何从XML节点中检索值。内容包括无命名空间XML与带命名空间XML的处理,并给出了实例演示及带有WHERE条件的查询方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方参考文档:XML DB Developer's Guide(11.2)

1、带有XMLType字段的表操作

-- Create table
create table T_XML_TEST
(
  id        NUMBER,
  xml_value XMLTYPE
);
--使用xmltype数据类型的静态方法createxml插入xml数据
INSERT INTO T_XML_TEST(id, xml_value) VALUES (1, XMLType.CreateXML(
       '<?xml version="1.0"?>
         <Envelope>
           <Body>
              <sayHelloResponse>
                 <return>94065中国 say: hello [axis2]</return>
              </sayHelloResponse>
         </Body>
      </Envelope>''));
--查询带xmltype类型字段的表的方法
select t.id, t.xml_value.getclobval() xml_value from T_XML_TEST t;


2、XMLTABLE函数使用,检索xml节点的值

(1)xml不带命名空间,如下xml:

<?xml version="1.0"?>
  <Envelope>
     <Body>
        <sayHelloResponse>
           <return>94065中国 say: hello [axis2]</return>
        </sayHelloResponse>
     </Body>
  </Envelope>

示例:

SELECT t."return", t."return2"
  FROM 
       XMLTABLE(XMLNAMESPACES('http://www.w3.org/2003/05/soap-envelope' as "soap",
                 'http://ws.apache.org/axis2' as "tns"
                 )
                ,'/Envelope' PASSING Xmltype.createxml(
                '<?xml version="1.0"?>
                   <Envelope>
                     <Body>
                       <sayHelloResponse>
                         <return>94065中国 say: hello [axis2]</return>
                       </sayHelloResponse>
                     </Body>
                   </Envelope>'
                )
                COLUMNS 
                "return" varchar2(100) PATH '/Envelope/Body/sayHelloResponse/return'
                ,"return2" varchar2(100) PATH '/Envelope/Body/sayHelloResponse/return'
                ) t;

输出结果:

(2)xml带有命名空间,如下xml:

<?xml version="1.0" encoding="UTF-8"?>
  <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ws.apache.org/axis2">
    <soap:Body>
      <tns:delete>
        <tns:record_id>7352</tns:record_id>
      </tns:delete>
    </soap:Body>
  </soap:Envelope>

示例:

SELECT t."return", t."return2"
  FROM 
       XMLTABLE(XMLNAMESPACES('http://www.w3.org/2003/05/soap-envelope' as "soap",
                 'http://ws.apache.org/axis2' as "tns"
                 )
                ,'/soap:Envelope' PASSING Xmltype.createxml(
                '<?xml version="1.0" encoding="UTF-8"?>
                  <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ws.apache.org/axis2">
                   <soap:Body>
                    <tns:delete>
                     <tns:record_id>7352</tns:record_id>
                    </tns:delete>
                   </soap:Body>
                  </soap:Envelope>'
                )
                COLUMNS 
                "return" varchar2(10) PATH '/soap:Envelope/soap:Body/tns:delete/tns:record_id'
                ,"return2" varchar2(10) PATH '/soap:Envelope/soap:Body/tns:delete/tns:record_id'
                ) t

输出结果:

(3)附加where条件

SELECT t.id, t.xml_value.getclobval(), t2."return"
  FROM T_XML_TEST t,
       XMLTABLE(XMLNAMESPACES('http://www.w3.org/2003/05/soap-envelope' as "soap",
                 'http://ws.apache.org/axis2' as "tns"
                 )
                ,'/soap:Envelope' PASSING t.xml_value COLUMNS
                "return" varchar2(10) PATH '/soap:Envelope/soap:Body/tns:delete/tns:record_id') t2
  where t.id = 254;


 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值