温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PLSQL中XML类型字段分析

发布时间:2021-11-10 14:59:38 来源:亿速云 阅读:315 作者:iii 栏目:关系型数据库

这篇文章主要讲解了“PLSQL中XML类型字段分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PLSQL中XML类型字段分析”吧!

xmltype: 

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

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

  • 建立含有xmltype数据类型的表

CREATE TABLE abc 
(id number,
xmldoc sys.xmltype);

    声明xmltype型字段用:sys.xmltype

  • 向带有xmltype类型的表插入带有数据

INSERT INTO abc
  (id
  ,xmldoc) VALUE
  (abc.nextval
  ,sys.xmltype.createxml('<name><aid="1" value="some values">abc</a></name>'));

    插入用 sys.xmlType.createXML('some xml doc')

  • 直接查询xmltype字段里面的内容

     得到id=1的value变量的值

SELECT i.xmldoc.extract('//name/a[@id=1]/@value').getstringval() AS ennames
      ,id
FROM   abc i

      得到a节点的值

SELECT id
      ,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
  • 更新xmltype里面的数据

UPDATE abc
SET    xmldoc = updatexml(xmldoc, '//name/a[@id=1]/@value', 'some new value')
WHERE  ......

(注意:如果里面没有<aid="1">这个节点,将不能update)

  • 添加超过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()返回符合条件的节点的值 。
SELECT extract(VALUE(a), 'Corporation/Persons/Person') cor_person
FROM   TABLE(xmlsequence(extract(v_xml, 'Root/Corporation'))) a;
实例:
SELECT sys.xmltype.createxml(t.value1).extract('//TResponse/OrderInfo/OrderInfos/text()')
       .getclobval()
FROM   abc t

感谢各位的阅读,以上就是“PLSQL中XML类型字段分析”的内容了,经过本文的学习后,相信大家对PLSQL中XML类型字段分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI