Oracle中对XMLType的简单操作(extract、extractvalue

本文详细介绍了如何在 Oracle 数据库中对 XMLType 字段进行操作,包括创建 XML 文件、插入 XML 数据、使用 extractvalue 和 extract 函数进行节点检索、通过视图进行复杂检索等。此外,还总结了 Oracle 对 XML 的检索特点及与传统表数据的区别。

前几天一直在做Oracle对XMLType字段的操作,我还不是Oracle大拿,到网上找了很多资料,但是很多就是单一功能的介绍,不能很好的解决问题,现在在这里总结下。

1、下面先创建一个名未test.xml的配置文件。

<?xml version="1.0" encoding="UTF-8" ?>
<collection xmlns="">
  <record>
    <leader>-----nam0-22-----^^^450-</leader>
    <datafield tag="200" ind1="1" ind2=" ">
      <subfield code="a">抗震救灾</subfield>
       <subfield code="f">奥运会</subfield>
    </datafield>
    <datafield tag="209" ind1=" " ind2=" ">
      <subfield code="a">经济学</subfield>
       <subfield code="b">计算机</subfield>
       <subfield code="c">10001</subfield>
       <subfield code="d">2005-07-09</subfield>
    </datafield>
    <datafield tag="610" ind1="0" ind2=" ">
       <subfield code="a">计算机</subfield>
       <subfield code="a">笔记本</subfield>
    </datafield>
  </record>
</collection>

2、在Oracle中创建一个存放该XML文件的表:

create or replace table xmlexample(
ID varchar2(10),
name varchar2(20),
data xmltype
)
insert into xmlexample(id,name,data)
values(sys_guid(),'my document',
        xmltype
        (
         bfilename(filepath,filename),
         nls_charset_id('AL32UTF8')
        )
)

其中filepath为文件路径,filename为文件名。

3、extractvalue()函数的使用
  Oracle提供对XML文件的检索功能(extractvalue),extractvalue只能返回一个节点的一个值,具体操作方法如下:

SQL> select id,name,
  2         extractvalue(x.data,'/collection/record/leader') as A
  3  from xmlexample x;

ID         NAME                 A
---------- -------------------- ----------------------------------
1          my document          -----nam0-22-----^^^450-

如果该节点有两个值,则系统提示错误。

4、extract()函数的使用
如果想查询所有subfield的值就要用到extract(),它可以返回一个节点下的所有值。操作如下

SQL> select id,name,
  2         extract(x.data,'/collection/record/datafield/subfield') as A
  3  from xmlexample x;

ID         NAME                 A
---------- -------------------- ---------------------------------------------------------
1          my document          <subfield xmlns="" code="a">抗震救灾</subfield><subfield xmlns="" code="f">何观.....

可以看到它返回的是XML格式的。如果我们想只返回它值就要是用两个函数了。

5、table和XMLSequence
操作如下:

SQL> select extractValue(value(i),'/subfield') xx
  2  from xmlexample x,
  3  table(XMLSequence(extract(x.data,'/collection/record/datafield/subfield'))) i;

XX
--------------------------------------------------------------------------------
抗震救灾
何观华
经济学
计算机
10001
2005-07-09
计算几  哈哈

7 rows selected。

6、检索出特定的节点的特定值
有时候我们在实际操作的时候并不是检索出所有值,而是根据条件查询出我们所需要的信息。如果我们想检索出
    <datafield tag="209" ind1=" " ind2=" ">
      <subfield code="a">经济学</subfield>
中的值-经济学

操作如下:

SQL> select id,name,
  2         extractvalue(x.data,'/collection/record/datafield[@tag="209"]/subfield[@code="a"]') as A
  3  from xmlexample x;

ID         NAME                 A
---------- -------------------- ---------------------------
1          my document          经济学

7、总结

Oracle对与XMLType的操作有很多种,还要靠大家自己去发现。数据库对XML的检索就是吧XML的节点当作一个列来检索,而不同的是表里装的是二维的数据,而XML中可以装N维。还有就是,表中列不存在就会提示无效标识符,如果节点不存在,则检索出NULL,不会报错。所以,对与XML文件的操作通常是通过视图来完成。

Oracle数据库中,处理XML数据的一个常见需求是提取XML元素或属性的值。为了帮助你掌握如何使用EXTRACTEXTRACTVALUE函数进行数据提取,推荐查看《Oracle XML处理函数详解:EXTRACT, EXTRACTVALUE, EXISTSNODE与SYS_函数》。这本书详细介绍了Oracle中的XML处理函数,包含了许多实际操作的示例,适合想要深入学习Oracle XML处理的读者。 参考资源链接:[Oracle XML处理函数详解:EXTRACT, EXTRACTVALUE, EXISTSNODE与SYS_函数](https://wenku.youkuaiyun.com/doc/6zs0dy1qe6?spm=1055.2569.3001.10343) EXTRACT函数可以从XMLType实例中按照XPath表达式提取内容,而EXTRACTVALUE用于提取指定XPath路径下的单一文本值。例如,假设我们有一个名为`xml_data`的表,其中包含一个XMLType类型的列`content_xml`,我们想提取`<root>`元素下的`<main>`元素的所有内容,可以使用以下SQL语句: ```sql SELECT EXTRACT(content_xml, '/root/main') AS extracted_content FROM xml_data; ``` 如果我们只对`<main>`元素下的`<姓名>`元素的文本值感兴趣,可以使用EXTRACTVALUE函数: ```sql SELECT EXTRACTVALUE(content_xml, '/root/main/姓名') AS name_value FROM xml_data; ``` 在使用这些函数时,确保提供的XPath是有效的,并且能够准确地指向你想要提取的XML元素或属性。此外,EXTRACTVALUE在XML文档结构不规范或无法找到指定路径时,可能会返回错误。因此,在生产环境中使用前,建议进行充分的测试。 为了深入理解这些函数的工作原理和最佳实践,建议在掌握基本用法后继续阅读《Oracle XML处理函数详解:EXTRACT, EXTRACTVALUE, EXISTSNODE与SYS_函数》,其中不仅包括了基础使用示例,还有高级用法和错误处理策略,能够帮助你进一步提升处理Oracle数据库中XML数据的能力。 参考资源链接:[Oracle XML处理函数详解:EXTRACT, EXTRACTVALUE, EXISTSNODE与SYS_函数](https://wenku.youkuaiyun.com/doc/6zs0dy1qe6?spm=1055.2569.3001.10343)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值