注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天涯倦客的博客

祝福你朋友永远快乐!

 
 
 

日志

 
 

PLSQL解析XML类型字段  

2013-05-27 15:33:15|  分类: Oracle |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

xmltype: 

       Oracle9i 支持一种新的系统定义数据类型,名为XMLType。XMLType提供了多种内建的成员函数,为创建、提取和索引存储在Oracle9i中的XML数据 提供了一种强有力的机制。作为一种新的数据类型,XMLType可用作表格和视图中的各个列的数据类型,并可在PL/SQL存储过程中作为参数、返回值和 变量使用。

      利用XMLType和这些功能,SQL开发者既可利用关系型数据库的强大能力,也可在XML的环境下工作。与此类似,XML开发者一方面可利用XML标准的强大能力,另一方面又能在关系型数据库的环境下工作。


1.建立含有xmltype数据类型的表
createtable abc (id number,xmldoc sys.xmltype);
声明xmltype型字段用:sys.xmltype 

2.向带有xmltype类型的表插入带有数据
insertinto abc (id,xmldoc) value (abc.nextval , sys.xmlType.createXML('<name><aid="1" value="some values">abc</a></name>'));
插入用 sys.xmlType.createXML('some xml doc')

3.直接查询xmltype字段里面的内容
得到id=1的value变脸的值 
selecti.xmldoc.extract('//name/a[@id=1]/@value').getStringVal() as ennames, id from abc i


得到a节点的值 
selectid, i.xmldoc.extract('//name/a/text()').getStringVal() as truename from abc i

得到节点id属性的值

Select hd.Data_t.extract('/root/name/@id').getStringVal()    As Name FROM sehr_house_data hd


4.更新xmltype里面的数据
updateabc set xmldoc=updateXML(xmldoc,'//name/a[@id=1]/@value','some new value')where ......
(注意:如果里面没有<aid="1">这个节点,将不能update) 

5.添加超过4k字节的xml文档到xmltype型字段
可以通过使用临时表的办法实现:
先建立一个临时的表,其中的一个字段是clob类型;
再将要写入xmltype字段的xml doc写入这个临时的clob型的字段中;
最后insertinto abc (id,xmldoc) values (abc_q.nextval , sys.xmlType.createXML((select contentfrom 临时表whereid=......)));


existsNode

       EXISTSNODE函数检查XML中的某一个节点是否存在。如果存在,返回1,否则返回0。  

select existsNode(value(a),'Corporation/Name')

   from table(xmlsequence(extract(v_xml,'Root/Corporation')))a;

select count(*)

   from table(xmlsequence(extract(v_xml,'Root/Corporation')))a

where existsNode(xmlvalue,'Corporation/Name[@id=1]') =1;


extractValue

       EXTRACTVALUE()是从某个节点中读取值。ExtractValue只能返回一个确切的位置节点的值,如果存在多个相同节点,Oracle就会报错 。

select extractValue(value(a),'Corporation/Name')cor_nam

   from table(xmlsequence(extract(v_xml,'Root/Corporation')))a;


extract

       EXTRACT函数返回一个XML文档的一个节点树,或者某一节点下所有符合条件的节点。


  select extract(value(a),'Corporation/Persons/Person')cor_person

    from table(xmlsequence(extract(v_xml,'Root/Corporation')))a;


Xmlsequence、table

      利用xmlsequence()和table()返回符合条件的节点的值 。

selectextract(value(a),'Corporation/Persons/Person') cor_person

    from table(xmlsequence(extract(v_xml,'Root/Corporation')))a;


实例1

实例2 多列
PLSQL解析XML类型字段 - 海里的贝壳 - apple的博客
 
  
 Select  Xmlconcat(Xmlelement("ID",Xmlattributes(Channel),Id),Xmlelement("NAME",Name))  From Dev_Camera;
Select  XMLELEMENT(Name data,Xmlelement("ID",Xmlattributes(Channel),Id),Xmlelement("NAME",Name))  From Dev_Camera;
select Xmlelement("camera",xmlcolattval(ID,NAME))  from dev_camera;
  评论这张
 
阅读(750)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017