DB2 XQuery学习笔记
CREATE DATABASE xmltut USING CODESET GBK TERRITORY US~
CREATE TABLE Customer (Cid BIGINT NOT NULL PRIMARY KEY, Info XML)~
CREATE UNIQUE INDEX cust_cid_xmlidx ON Customer(Info)
GENERATE KEY USING XMLPATTERN
'declare default element namespace "http://posample.org"~ /customerinfo/@Cid'
AS SQL DOUBLE~
INSERT INTO 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>')~
INSERT INTO Customer (Cid, Info) VALUES (1002,
'<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 Customer (Cid, Info) VALUES (1003,
'<customerinfo xmlns="http://posample.org" Cid="1003">
<name>Robert Shoemaker</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>')~
SELECT * from Customer~
UPDATE customer SET info =
'<customerinfo xmlns="http://posample.org" Cid="1002">
<name>Jim Noodle</name>
<addr country="Canada">
<street>1150 Maple Drive</street>
<city>Newtown</city>
<prov-state>Ontario</prov-state>
<pcode-zip>Z9Z 2P2</pcode-zip>
</addr>
<phone type="work">905-555-7258</phone>
</customerinfo>'
WHERE XMLEXISTS (
'declare default element namespace "http://posample.org";
$doc/customerinfo[@Cid = 1002]'
passing INFO as "doc")~
DELETE FROM Customer
WHERE XMLEXISTS (
'declare default element namespace "http://posample.org";
$doc/customerinfo[@Cid = 1003]'
passing INFO as "doc")~
SELECT count(*) from Customer~
SELECT XMLQUERY (
'declare default element namespace "http://posample.org";
for $d in $doc/customerinfo
return <out>{$d/name}</out>'
passing INFO as "doc")
FROM Customer as c
WHERE XMLEXISTS ('declare default element namespace "http://posample.org";
$i/customerinfo/addr[city="Toronto"]' passing c.INFO as "i")~
UPDATE COMMAND OPTIONS USING i ON~
-- 不使用SQL的情况下检索INFO列中所有的XML文档
XQUERY db2-fn:xmlcolumn ('CUSTOMER.INFO')~
-- 相当于
SELECT Info FROM Customer~
-- 全查询
XQUERY db2-fn:sqlquery ('SELECT Info FROM Customer')~
-- 检索和过滤XML值
XQUERY declare default element namespace "http://posample.org";
for $d in db2-fn:xmlcolumn('CUSTOMER.INFO')/customerinfo
where $d/addr/city="Toronto"
return <out>{$d/name}</out>~
XQUERY declare default element namespace "http://posample.org";
for $d in db2-fn:sqlquery(
'SELECT INFO
FROM CUSTOMER
WHERE Cid < 2000')/customerinfo
where $d/addr/city="Toronto"
return <out>{$d/name}</out>~
-- XML模式注册
REGISTER XMLSCHEMA 'http://posample.org'
FROM 'file:///<C:/>customer.xsd' AS posample.customer COMPLETE~
REGISTER XMLSCHEMA [url]http://posample.org/product.xsd[/url] FROM product.xsd \
AS myschema.product
COMPLETE XMLSCHEMA myschema.product~
REGISTER XMLSCHEMA [url]http://posample.org/product.xsd[/url] FROM product.xsd \
AS myschema.product COMPLETE~
customer.xsd
<?xml version="1.0"?>
<xs:schema targetNamespace="http://podemo.org" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="customerinfo">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="1" />
<xs:element name="addr" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="street" type="xs:string" minOccurs="1" />
<xs:element name="city" type="xs:string" minOccurs="1" />
<xs:element name="prov-state" type="xs:string" minOccurs="1" />
<xs:element name="pcode-zip" type="xs:string" minOccurs="1" />
</xs:sequence>
<xs:attribute name="country" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="phone" nillable="true" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type" form="unqualified" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="assistant" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="0" />
<xs:element name="phone" nillable="true" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent >
<xs:extension base="xs:string">
<xs:attribute name="type" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Cid" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:schema>
INSERT INTO Customer(Cid, Info) VALUES (1003, XMLVALIDATE (XMLPARSE (DOCUMENT
'<customerinfo xmlns="http://posample.org" Cid="1003">
<name>Robert Shoemaker</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-7258</phone>
<phone type="home">416-555-2937</phone>
<phone type="cell">905-555-8743</phone>
<phone type="cottage">613-555-3278</phone>
</customerinfo>' PRESERVE WHITESPACE )
ACCORDING TO XMLSCHEMA ID posample.customer ))~
CREATE TABLE Customer (Cid BIGINT NOT NULL PRIMARY KEY,
Info XML,
History XML)
CREATE TABLE MyCustomer LIKE Customer;
ALTER TABLE MyCustomer ADD COLUMN Preferences XML;
JDBC插入XML
PreparedStatement insertStmt = null;
String sqls = null;
int cid = 1015;
sqls = "INSERT INTO MyCustomer (Cid, Info) VALUES (?, ?)";
insertStmt = conn.prepareStatement(sqls);
insertStmt.setInt(1, cid);
File file = new File("c6.xml");
insertStmt.setBinaryStream(2, new FileInputStream(file), (int)file.length());
insertStmt.executeUpdate();
JDBC更新XML
PreparedStatement updateStmt = null;
String sqls = null;
int cid = 1004;
sqls = "UPDATE MyCustomer SET Info=? WHERE Cid=?";
updateStmt = conn.prepareStatement(sqls);
updateStmt.setInt(1, cid);
File file = new File("c7.xml");
updateStmt.setBinaryStream(2, new FileInputStream(file), (int)file.length());
updateStmt.executeUpdate();
-- 删除数据
DELETE FROM MyCustomer
WHERE XMLEXISTS ('declare default element namespace "http://posample.org";
$d//addr[city="Markham"]' passing INFO as "d")~
-- XML列创建触发器
CREATE TRIGGER UPDAFTR
AFTER UPDATE OF Info
ON MyCustomer
REFERENCING NEW AS N
FOR EACH ROW
BEGIN ATOMIC
INSERT INTO CustLog VALUES(N.CID, CURRENT TIMESTAMP, 'Update');
END~
CREATE TRIGGER INSAFTR
AFTER INSERT ON Customer
REFERENCING NEW AS N
FOR EACH ROW
BEGIN ATOMIC
INSERT INTO CustLog VALUES(N.CID, CURRENT TIMESTAMP, 'Insert');
END~
-- XML解析
INSERT INTO MyCustomer (Cid, Info)
VALUES (?, xmlparse(document cast(? as clob(1k)) preserve whitespace))~
-- 在XQuery中,查询可以调用下列函数之一来获取DB2数据库中的输入XML数据:db2-fn:sqlquery 和 db2-fn:xmlcolumn。db2-fn:xmlcolumn函数将检索整个XML列,而db2-fn:sqlquery将检索基于SQL查询的XML值。
db2-fn:xmlcolumn('BUSINESS.ORDERS.PURCHASE_ORDER')/shipping_address/city
db2-fn:sqlquery("
SELECT purchase_order FROM business.orders
WHERE ship_date = '2005-06-15' ")/shipping_address/city
SQL是一种不区分大小写的语言
XQuery是一种区分大小写的语言
函数
XMLQUERY
XMLTABLE
谓词
XMLEXISTS
SELECT XMLQUERY ('declare default element namespace "http://posample.org";
$d/customerinfo/phone' passing INFO as "d")
FROM CUSTOMER~
VALUES (XMLQUERY ('declare default element namespace "http://posample.org";
db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo/phone'))~
SELECT Cid, XMLQUERY ('declare default element namespace "http://posample.org";
$d//addr[city="Aurora"]' passing INFO as "d") AS ADDRESS
FROM CUSTOMER~
SELECT Cid, XMLQUERY ('declare default element namespace "http://posample.org";
$d/customerinfo/addr' passing c.INFO as "d")
FROM Customer as c
WHERE XMLEXISTS ('declare default element namespace "http://posample.org";
$d//addr[city="Aurora"]' passing c.INFO as "d")~
SELECT R.Pid
FROM PURCHASEORDER P, PRODUCT R
WHERE R.NAME =
XMLCAST( XMLQUERY ('declare default element namespace "http://posample.org";
$d/PurchaseOrder/itemlist/item/product/name'
PASSING P.PORDER AS "d") AS VARCHAR(128))~
SELECT Pid
FROM PRODUCT
ORDER BY XMLCAST(XMLQUERY ('declare default element namespace "http://posample.org";
$d/product/description/name'
PASSING DESCRIPTION AS "d") AS VARCHAR(128))~
SELECT X.*
FROM XMLTABLE (xmlnamespaces (DEFAULT "http://posample.org"),
'db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo'
COLUMNS "CUSTNAME" CHAR(30) PATH 'name',
"PHONENUM" XML PATH 'phone')
as X~
SELECT X.*
FROM XMLTABLE (xmlnamespaces (DEFAULT "http://posample.org"),
'db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo'
COLUMNS "CUSTNAME" CHAR(30) PATH 'name',
"PHONENUM" XML PATH 'phone')
as X
ORDER BY X.CUSTNAME~
INSERT INTO CUSTPHONE
SELECT X.*
FROM XMLTABLE (XMLNAMESPACES (DEFAULT 'http://posample.org'),
'db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo'
COLUMNS
"CUSTNAME" CHAR(30) PATH 'name',
"PHONENUM" XML PATH 'document{<allphones>{phone}</allphones>}'
)as X~
SELECT X.*
FROM CUSTOMER C, XMLTABLE (xmlnamespaces (DEFAULT 'http://posample.org'),
'$cust/customerinfo/phone' PASSING C.INFO as "cust"
COLUMNS "CUSTNAME" CHAR(30) PATH '../name',
"PHONETYPE" CHAR(30) PATH '@type',
"PHONENUM" CHAR(15) PATH '.'
)as X~
SELECT X.* FROM CUSTOMER C, XMLTABLE (xmlnamespaces (DEFAULT 'http://posample.org'),
'$cust/customerinfo/phone' PASSING C.INFO as "cust"
COLUMNS "CUSTNAME" CHAR(30) PATH '../name',
"PHONETYPE" CHAR(30) PATH '@type',
"PHONENUM" XML PATH '.' ) as X~
SELECT Cid
FROM CUSTOMER
WHERE XMLEXISTS ('declare default element namespace "http://posample.org";
$d//addr[city="Toronto"]' passing INFO as "d")~
SELECT *
FROM CUSTOMER
WHERE XMLEXISTS ('declare default element namespace "http://posample.org";
$d/customerinfo[@Cid=1000]' passing INFO as "d")~
SELECT *
FROM CUSTOMER
WHERE XMLEXISTS ('declare default element namespace "http://posample.org";
$d/customerinfo/@Cid=1000' passing INFO as "d")~
CREATE TABLE mytable (id BIGINT, xmlcol XML)~
CREATE INDEX myidx ON mytable(xmlcol)
GENERATE KEY USING XMLPATTERN '//text()' AS SQL VARCHAR(255)~
SELECT xmlcol FROM mytable
WHERE XMLEXISTS('$doc/CUSTOMER/ORDERS/ORDERKEY/text()="A512" '
PASSING xmlcol AS "doc")~
SELECT xmlcol FROM mytable
WHERE XMLEXISTS('$doc/CUSTOMER[ORDERS/ORDERKEY/text()="A512"] '
PASSING xmlcol AS "doc")~
-- XML数据类型转换
SELECT XMLQUERY ('declare default element namespace "http://posample.org";
$d/customerinfo/addr' passing c.INFO as "d")
FROM Customer as c
WHERE XMLEXISTS('declare default element namespace "http://posample.org";
$d//addr[city=$cityName]'
passing c.INFO as "d",
'Aurora' AS "cityName")~
SELECT XMLQUERY ('declare default element namespace "http://posample.org";
$d/customerinfo/addr' passing c.INFO as "d")
FROM Customer as c
WHERE XMLEXISTS('declare default element namespace "http://posample.org";
$d//addr[city=$cityName]'
passing c.INFO as "d",
CAST (? AS VARCHAR(128)) AS "cityName")~
SELECT companydocs FROM companyinfo
WHERE XMLEXISTS('$x/company/emp[@salary > 35000]'
PASSING companydocs AS "x")~
CREATE INDEX empindex on companyinfo(companydocs)
GENERATE KEY USING XMLPATTERN '//@salary' AS SQL DOUBLE~
CREATE INDEX empindex on companyinfo(companydocs)
GENERATE KEY USING XMLPATTERN '/company/emp/@salary'
AS SQL DOUBLE~
SELECT companydocs FROM companyinfo
WHERE XMLEXISTS('$x/company/emp[@id="31664"]'
PASSING companydocs AS "x")~
SELECT companydocs FROM companyinfo
WHERE XMLEXISTS('$x/company/emp/dept[@id="K55"]
PASSING companydocs AS "x")~
XMLTABLE('$nr/MainBody/DJ_ZT' passing A.XMLNR as "nr" columns
"BS" VARCHAR(24) PATH 'BS',
"MC" VARCHAR(240) PATH 'MC',
"ZH" VARCHAR(100) PATH 'ZH',
"XZQH_DM" VARCHAR(24) PATH 'XZQH_DM',
"FDDBR" VARCHAR(100) PATH 'FDDBR',
"JYDZ" VARCHAR(240) PATH 'JYDZ',
"QYLX_ZL" VARCHAR(4) PATH 'QYLX_ZL',
"QYLX_XL" VARCHAR(4) PATH 'QYLX_XL',
"CJRQ" VARCHAR(64) PATH 'CJRQ') AS X
WHERE A.UHID = ? AND A.ZT = ?
DB2 XQuery学习笔记相关推荐
- DB2 UDB V8.1 管理 学习笔记
DB2 UDB V8.1 管理 学习笔记 DB2 学习笔记 - AIview.com Last updated on Wednesday, August 24, 2005 Skip to naviga ...
- 知识图谱学习笔记(1)
知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...
- 7 种 Javascript 常用设计模式学习笔记
7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...
- Python学习笔记:访问数据库
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- SqlServer学习笔记【暂】
Sql学习笔记,暂时先保存在着,等不忙了再整理成章节,如果其中有问题的,还请各位大神不吝赐教! 1 --------------------------------------所有的数据基于North ...
- Qt学习笔记之数据库
一.数据库简介 1.1.数据和数据库(DB) 用计算机进行数据处理,首先就要把信息以数据形式存储到计算机中,故数据是可以被计算机接受和处理的符号.根据所表示的信息特征不同,数据有不同的类别,如数字.文 ...
- 学习笔记之-Activiti7工作流引擎,概述,环境搭建,类关系图,使用Activiti BPMN visualizer,流程变量,组任务 网关,Activiti整合Spring SpringBoot
本篇学习笔记是观看黑马程序员Activiti7视频而得 Activiti7 一.工作流介绍 1.1 概念 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是" ...
- 深度学习笔记5:正则化与dropout
出处:数据科学家养成记 深度学习笔记5:正则化与dropout 在笔记 4 中,笔者详细阐述了机器学习中利用正则化防止过拟合的基本方法,对 L1 和 L2 范数进行了通俗的解释.为了防止深度神经网络出 ...
- 深度学习笔记4:深度神经网络的正则化
出处:数据科学家养成记 深度学习笔记4:深度神经网络的正则化 恍恍惚惚,又20天没写了.今天笔者要写的是关于机器学习和深度学习中的一项关键技术:正则化.相信在机器学习领域摸爬滚打多年的你一定知道正则化 ...
最新文章
- 进程、线程、协程、通信方式
- golang 执行外部命令 超时处理 exec.CommandContext
- qt creator报错处理积累
- SSH框架总结(框架分析+环境搭建+实例源代码下载)
- Java 8 - 正确高效的使用并行流
- 四、记一次失败的 CAS 搭建 之 结果总是那么伤(客户端)
- PHP的mysqli操作DB
- 使用IPSec加强系统安全性
- oracle查看表的命令,Oracle常用查看表结构命令
- @Transactional事务生效条件与样例
- jpa onetoone_拥抱开源从表设计到 JPA 实现
- 力扣225. 用队列实现栈(JavaScript)
- OD数据集(一)—介绍
- office 论文 页码_officexx论文页码【officexx设置论文页码】
- 制作一个简单的倒计时动画
- 12个scp命令传输文件的例子
- 拼多多怎样降低退款率?厦门宝讯网捷
- 串口打开失败!请检查指定串口是否存在或者已被打开
- RT-thread应用讲解——norflash
- 光速入门Docker 和 Kubernetes,一起学~
热门文章
- 83篇文献-万字总结强化学习之路
- 当我们拿到数据进行建模时,如何选择更合适的算法?
- 剑指offer_第14题_链表中倒数第k个结点_Python
- 数百个CV实战项目与必备7本书5000页中英文CV书籍以及算法工程师必备资料免费送啦~...
- NeurIPS 2020 :新一代算法“鉴黄师”诞生,中科院计算所研究生一作
- PyTorch 1.7发布,支持CUDA 11、Windows分布式训练
- 程序员:我只想买件没有格子的衬衫,怎么就这么难?
- SPU表管理之保存SPU表数据
- 技术15期:4种常用的可视化技术【web前端】
- 正确debug的TensorFlow的姿势