mysql xmltype 乱码_Oracle中对XMLType的简单操作(extract、extractvalue)

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

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

-----nam0-22-----^^^450-

抗震救灾

奥运会

经济学

计算机

10001

2005-07-09

计算机

笔记本

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          抗震救灾何观.....

可以看到它返回的是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、检索出特定的节点的特定值

有时候我们在实际操作的时候并不是检索出所有值,而是根据条件查询出我们所需要的信息。如果我们想检索出

经济学

中的值-经济学

操作如下:

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文件的操作通常是通过视图来完成。

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值