Chinaunix首页 | 论坛 | 博客
  • 博客访问: 106903526
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903527
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903528
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903529
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903530
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903531
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903532
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903533
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903534
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903535
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903536
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903537
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903538
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903529
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903540
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903541
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903542
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903543
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903544
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903545
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903546
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903547
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903548
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903549
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903550
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903551
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903552
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903553
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903544
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903555
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903556
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903557
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903558
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903559
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903560
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903561
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903562
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903563
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903564
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903565
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903566
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903567
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903568
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903559
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903570
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903571
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903572
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903573
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903574
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903575
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903576
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(8)-sdccf-ChinaUnix博客
  • 博客访问: 106903577
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:14:11

developerWorks



“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119950) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119949) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119948) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119947) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119946) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119945) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119944) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119943) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119942) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119941) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119940) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119939) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119938) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119937) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119936) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119935) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119934) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119933) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119932) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119931) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119930) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119929) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119928) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119927) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119926) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119925) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119924) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119923) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119922) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119921) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119920) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119919) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119918) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119917) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119916) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119915) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119914) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119913) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119912) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119911) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119910) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119909) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119908) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119907) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119906) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119905) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119904) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119903) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119902) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119901) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119900) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


“混合型” 查询

您已经看到了如何编写 XQuery 来检索 XML 文档片段、创建 XML 输出的新形式以及根据在查询本身指定的条件返回不同的输出。这些都是查询 DB2 中存储的 XML 数据的简单方法。

您要知道,关于 XQuery 要学习的内容远比本教程讨论的多得多。但是,有一个主题是我们不能忽略的:如何编写同时包含 SQL 和 XQuery 表达式的查询。如果需要让查询同时根据 XML 和非 XML 列值进行过滤,那么就需要掌握这种技术。

因为本教程主要关注 XQuery 并将它用作顶级语言,所以我们先研究如何将 SQL 嵌入 XQuery 中。但一定要注意,也可以采用相反的做法 —— 将 XQuery 嵌入 SQL 中。在本教程末尾,您会看到这种做法的一个简短示例。但是,关于 SQL/XML 以及如何将 XQuery 嵌入 SQL 中的更多信息,请参见 参考资料

要将 SQL 嵌入 XQuery 中,需要使用 db2-fn:sqlquery 函数替代 db2-fn:xmlcolumn 函数。db2-fn:sqlquery 函数执行一个 SQL 查询并只返回选择的数据。传递给 db2-fn:sqlquery 的 SQL 查询必须只返回 XML 数据;这使 XQuery 能够进一步处理 SQL 查询的结果。

我们用一个示例将已经讨论的许多概念结合起来。假设希望获得住在 San Jose 的 Gold 客户的所有电子邮件地址。如果一个客户有多个电子邮件地址,那么希望这些地址在输出中是同一个记录的组成部分。最后,如果符合条件的 Gold 客户没有提供电子邮件地址,那么希望检索他的邮政地址。编写这样的查询的一种方法如下:



                    
xquery 
for $y in 
db2-fn:sqlquery('select contactinfo from clients where status=''Gold'' ')/Client
where $y/Address/city="San Jose"
return (
     if ($y/email) then {$y/email}
     else $y/Address   
)

我们仔细看看第三行,这里嵌入了一个 SQL 语句。这个 SELECT 语句包含一个基于 status 列的查询谓词,将这个 VARCHAR 列的值与字符串 Gold 进行比较。在 SQL 中,这样的字符串要包围在单引号中。尽管这个示例看起来似乎使用了双引号,但实际上是在比较值前后使用了两个单引号(''Gold'')。“额外的” 单引号是转义字符。如果在基于字符串的查询谓词外使用双引号代替单引号,就会出现语法错误。

这个查询的输出是:



                    

	
		love2shop@yahoo.com
	

1204 Meridian Ave. 4A San Jose CA 95124

一定要注意,也可以将 XQuery 嵌入 SQL 中。实际上,DB2 9 提供了对标准 SQL/XML 函数的支持,这些函数常常用来构造以 SQL 为最外层(即顶级)语言的混合型查询。尽管详细讨论 DB2 的 SQL/XML 支持超出了本教程的范围,但至少有两个函数值得注意:

XMLExists
允许导航到 XML 文档中的一个元素(或其他类型的节点)并对特定的条件进行测试。在 SQL WHERE 子句中指定时,XMLExists 将返回的结果限制为那些包含满足指定条件(即指定的条件为 “true”)的 XML 文档的行。您可能猜到了,应该将 XQuery 表达式作为输入传递给 XMLExists 函数,从而导航到文档中感兴趣的节点。
XMLQuery
允许将 XML 放到 SQL/XML 查询返回的 SQL 结果集中。它通常用来从 XML 文档中检索一个或多个元素。同样,XMLQuery 函数也以 XQuery 表达式作为输入。

考虑以下查询。这个查询将 SQL 用作顶级语言并包含对 XMLQueryXMLExists 函数的调用:



                    
select name, status,
xmlquery('$c/Client/phone/home' passing contactinfo as "c") 
from clients 
where xmlexists('$y/Client/Address[zip="95032"]' passing contactinfo as "y")

这个查询返回的结果集包括客户姓名、状态和家庭电话号码列。前两列包含 SQL VARCHAR 数据,第三列包含从符合条件的 XML 文档中提取的一个 XML 元素。我们来仔细看看这个查询的第二行和第四行。

第二行在 SELECT 子句中调用 XMLQuery,这表示这个函数返回的结果应该作为 SQL 结果集中的一列。我们指定一个 XQuery 路径表达式作为这个函数的输入,这个表达式让 DB2 导航到 Client 元素下面的 phone 元素的 home 子元素。这个路径表达式引用一个变量($c),这个变量引用 contactinfo 列。

第四行在 SQL WHERE 子句中调用 XMLExists,这表示 DB2 应该根据一个 XML 谓词对结果进行限制。这个谓词是在路径表达式中指定的,它表示我们只对具有特定邮政编码的客户感兴趣。同样,作为这个 SQL/XML 函数的输入提供的路径表达式定义一个变量(在这个示例中是 $y),这个变量标识 DB2 将在哪里寻找 XML 文档(在 contactinfo 列中)。

对于 示例数据,这个查询的输出是一个单行的结果集,其值如下:



                    
Lisa Hansen         Silver    4083332222

关于 DB2 的 SQL/XML 支持的更多信息,参见 参考资料

阅读(119899) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~