上手DB2的xml(1)

接触DB2的第12天,因为工作任务的需要,开始接触XML的一些东西了,之前看的XML的一些百度相关的东西大致知道了XML是怎么样一个东西,其实因为json永久了蛮嫌弃xml的,然后知乎上说xml是面向机器的,对于机器来说结构很好,其实我觉得json就蛮好的,先来接触一下xml再来说二者的是非吧。
那我的需求是表中有xml字段,xml字段中有节点,那如果是json的话,我可以使用字段名->’键名’ 来获取对应的值,然后有个函数json_each()什么的,可以把字段名转换为一个表,那如果是xml呢,上述两个操作应该怎么做?

  下载了DB2V10.5的中文文档,重点参考其中的DB2pureXML和DB2XQueryRef两个部分。

pureXML概述

  pureXML功能部件语序您将格式良好的XML文档存储在具有XML数据类型的数据库表中,通过将xml数据存储在xml列中,数据可保持其本机分层结构形式,而不是将其作为文本存储或映射为其他数据模型。
  因为pureXML数据存储已完全集成。所以可利用现有DB2数据库服务器功能来访问和管理存储的XML数据。

查询和更新的方法

  • XQuery
    • XQuery是用于解释、检索和修改查询XML数据的通用语言。DB2数据库服务器允许直接 调用*XQuery或从SQL调用XQuery。因为XML数据存储在DB2表和视图中,所以提供了一些函数,用于通过直接命名表或视图或通过指定SQL查询从指定的表和视图中抽取XML数据*。XQuery支持各种用于处理XML数据、更新元素和属性之类的XML对象和构造新XML对象的表达式。XQuery的编程接口提供了类似SQL的功能,用于执行查询并检索结果。
  • SQL语句和SQL/XML函数
    • 许多SQL语句支持XML数据类型。这是的您能够对XML数据执行许多常见数据库操作,例如,创建具有XML列的表、将XML列添加至现有表,创建基于XML列的索引、对具有XML列的表创建触发器以及插入、更新或删除XML文档。DB2数据库服务器支持的一组SQL/XML函数、表达式和规范利用XML数据类型。
    • 可以从SQL查询中调用XQuery。在这种情况下,SQL查询可以将数据以绑定的变量的形式传递至XQuery。
    • 当使用SQL全查询来查询XML数据时,将在列级别进行查询,因此查询将返回整个XML文档,如果要返回XML的片段,必须使用XQuery。

XQuery和XPath数据模型

  XQuery表达式对XQuery和XPath数据模型(XDM)的实例进行运算并返回数据模型的实例。
  XDM是对一个或多个XML文档或片段的抽象表示。数据模型会定义XQuery中的表达式的允许值,包括中间计算期间使用的值。

节点层次结构

  • 文档节点D
  • 元素节点E
  • 属性 节点A
  • 文本 节点T

pureXML教程

1.创建测试库和表

db2 => create database xmltut
DB20000I  CREATE DATABASE 命令成功完成。
db2 => connect to xmltut

   数据库连接信息

 数据库服务器         = DB2/NT64 11.1.1.1
 SQL 授权标识         = THINKPAD
 本地数据库别名       = XMLTUT

db2 => create table customer (cid bigint not null primary key,info xml)
DB20000I  SQL 命令成功完成。

2.创建基于XML数据的索引

create index cust_cid_xmlidx ON customer generate key using xmlPATTERN \
'declare default element namespace "http://posample.org";/customerinfo/@Cid'
AS SQL DOUBLE

此语句将对customer表的info列中的元素的cid属性值建立索引(@后面是属性值)。缺省情况下,对XML数据建立索引之后,如果未能将此XML数据转换为指定的数据类型SQL DOUBLE,那么不会创建索引条目,也不会返回错误。
您指定的XML模式区分大小写。例如,如果XML文档中包含cid属性而不是Cid属性,那么那些文档与此索引将不匹配。

3.插入XML列

insert into thinkpad.Customer(cid,info) values(1000,
'<customerinfo xmlns="http://posample.org" Cid="1000">
    <name>Kathy Smith</name>
    <addr country="Canada">
        <street>5 Rosewood</street>
        <city>Toronto</city>
        <prov-state>Ontario</prov-state>
        <pcode-zip>M6w 1E6</pcode-zip>
    </addr>
    <phone type="work">416-555-1358</phone>
</customerinfo>')

'<customerinfo xmlns="http://posample.org" Cid="1002">
    <name>Jim Noodle</name>
    <addr country="Canada">
        <street>25 EastCreek</street>
        <city>Markham</city>
        <prov-state>Ontario</prov-state>
        <pcode-zip>N9C 3T6</pcode-zip>
    </addr>
    <phone type="work">905-555-7258</phone>
</customerinfo>')

insert into thinkpad.Customer(cid,info) values(1003,
'<customerinfo xmlns="http://posample.org" Cid="1003">
    <name>Robert Shoemarker</name>
    <addr country="Canada">
        <street>1596 Baseline</street>
        <city>Aurora</city>
        <prov-state>Ontario</prov-state>
        <pcode-zip>N8X 7F8</pcode-zip>
    </addr>
    <phone type="work">905-555-2937</phone>
</customerinfo>')

4.更新XML文档

pg里面json更新很方便,json_set或者||符号可以很容易的进行更新,不需要复制大段的原文档。那么XML的更新又是怎么做的呢?

  • * 使用SQL进行更新*
 update thinkpad.cu
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值