Oracle对xml的支持

        Oracle 9i release1引入了对象类型xmltype。在oracle 9i release1中使用xmltype必须加前缀sys。在oracle 9i release2之后不需要。
        要使用xmltype必须要了解两件事请:
1.        它是一个oracle内置的对象类型。可以用在table的列上,也可以在plsql中作为变量的类型来使用。
2.        xquery,oracle查找和建立xml 文档的语言。在oracle 10g release2。
当然,我们还需要对xml很熟悉,如基本概念,xpath等。

/**
使用和操作xmltype
**/

create table falls(
       fall_id number,
       fall xmltype
);

--使用xmltype的静态方法createxml插入xml数据
INSERT INTO falls VALUES (1, XMLType.CreateXML(
       '<?xml version="1.0"?>
        <fall>
           <name>Munising Falls</name>
           <county>Alger</county>
           <state>MI</state>
           <url>
              [url]http://michiganwaterfalls.com/munising_falls/munising_falls.html[/url]
           </url>
        </fall>'));

    INSERT INTO falls VALUES (2, XMLType.CreateXML(
       '<?xml version="1.0"?>
        <fall>
           <name>Au Train Falls</name>
           <county>Alger</county>
           <state>MI</state>
           <url>
              [url]http://michiganwaterfalls.com/autrain_falls/autrain_falls.html[/url]
           </url>
        </fall>'));

    INSERT INTO falls VALUES (3, XMLType.CreateXML(
       '<?xml version="1.0"?>
        <fall>
           <name>Laughing Whitefish Falls</name>
           <county>Alger</county>
           <state>MI</state>
        </fall>'));

类型xmltype中内置了很多静态方法可以用来操作xml,具体地可以在plsqldeveloper中的type栏目中查找xmltype。
插入的时候调用xmltype的createxml方法。下面的是静态方法existsNode的两种用法。
select fall_id from falls f where f.fall.existsNode('/fall/url')>0;--存在fall/url
select fall_id from falls where existsNode(fall,'/fall/url')>0;--fall列中存在fall下面有url的

在plsql中使用,并获得指定字符,采用静态方法extract:
--在plqldev中运行报错,在sqlplus中正确
<<demo_block>>
    DECLARE
       fall XMLType;
       url VARCHAR2(100);
    BEGIN
       --将xml查询出来放入变量中
       SELECT fall INTO demo_block.fall
       FROM falls f
       WHERE f.fall_id = 1;
       --抽取xml文档,并获得指定字符
       url := fall.extract('/fall/url/text(  )').getStringVal;

   DBMS_OUTPUT.PUT_LINE(url);
    END;
   
注:fall.extract('/fall/url/text(  )').getStringVal 调用静态方法extract提取相应数据,也就是提供根目录下的url子目录下的文本,text()指url的体部文本。geteStringVal是文本的值。
select Upper(Xmltype.getStringVal(xmltype.extract(fall,'/fall/url/text()'))) from falls
       where existsNode(fall,'/fall/url')>0;
上面的是将查询出来的html地址变为大写。更多请参考具体资料和类型定义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值