Chinaunix首页 | 论坛 | 博客
  • 博客访问: 105522239
  • 博文数量: 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博客
  • 博客访问: 105522250
  • 博文数量: 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博客
  • 博客访问: 105522251
  • 博文数量: 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博客
  • 博客访问: 105522252
  • 博文数量: 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博客
  • 博客访问: 105522253
  • 博文数量: 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博客
  • 博客访问: 105522254
  • 博文数量: 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博客
  • 博客访问: 105522255
  • 博文数量: 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博客
  • 博客访问: 105522257
  • 博文数量: 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博客
  • 博客访问: 105522258
  • 博文数量: 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博客
  • 博客访问: 105522259
  • 博文数量: 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博客
  • 博客访问: 105522260
  • 博文数量: 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博客
  • 博客访问: 105522261
  • 博文数量: 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博客
  • 博客访问: 105522262
  • 博文数量: 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博客
  • 博客访问: 105522263
  • 博文数量: 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博客
  • 博客访问: 105522254
  • 博文数量: 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博客
  • 博客访问: 105522265
  • 博文数量: 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博客
  • 博客访问: 105522266
  • 博文数量: 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博客
  • 博客访问: 105522267
  • 博文数量: 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博客
  • 博客访问: 105522268
  • 博文数量: 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博客
  • 博客访问: 105522269
  • 博文数量: 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博客
  • 博客访问: 105522270
  • 博文数量: 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博客
  • 博客访问: 105522271
  • 博文数量: 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博客
  • 博客访问: 105522272
  • 博文数量: 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博客
  • 博客访问: 105522273
  • 博文数量: 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博客
  • 博客访问: 105522274
  • 博文数量: 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博客
  • 博客访问: 105522275
  • 博文数量: 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博客
  • 博客访问: 105522276
  • 博文数量: 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博客
  • 博客访问: 105522277
  • 博文数量: 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博客
  • 博客访问: 105522278
  • 博文数量: 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博客
  • 博客访问: 105522269
  • 博文数量: 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博客
  • 博客访问: 105522280
  • 博文数量: 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博客
  • 博客访问: 105522281
  • 博文数量: 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博客
  • 博客访问: 105522282
  • 博文数量: 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博客
  • 博客访问: 105522283
  • 博文数量: 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博客
  • 博客访问: 105522284
  • 博文数量: 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博客
  • 博客访问: 105522285
  • 博文数量: 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博客
  • 博客访问: 105522286
  • 博文数量: 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博客
  • 博客访问: 105522287
  • 博文数量: 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博客
  • 博客访问: 105522288
  • 博文数量: 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博客
  • 博客访问: 105522289
  • 博文数量: 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博客
  • 博客访问: 105522291
  • 博文数量: 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博客
  • 博客访问: 105522292
  • 博文数量: 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博客
  • 博客访问: 105522293
  • 博文数量: 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博客
  • 博客访问: 105522284
  • 博文数量: 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博客
  • 博客访问: 105522295
  • 博文数量: 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博客
  • 博客访问: 105522296
  • 博文数量: 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博客
  • 博客访问: 105522297
  • 博文数量: 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博客
  • 博客访问: 105522298
  • 博文数量: 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博客
  • 博客访问: 105522299
  • 博文数量: 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博客
  • 博客访问: 105522300
  • 博文数量: 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博客
  • 博客访问: 105522301
  • 博文数量: 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博客
  • 博客访问: 105522302
  • 博文数量: 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 支持的更多信息,参见 参考资料

阅读(119446) | 评论(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 支持的更多信息,参见 参考资料

阅读(119445) | 评论(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 支持的更多信息,参见 参考资料

阅读(119444) | 评论(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 支持的更多信息,参见 参考资料

阅读(119443) | 评论(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 支持的更多信息,参见 参考资料

阅读(119442) | 评论(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 支持的更多信息,参见 参考资料

阅读(119441) | 评论(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 支持的更多信息,参见 参考资料

阅读(119440) | 评论(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 支持的更多信息,参见 参考资料

阅读(119439) | 评论(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 支持的更多信息,参见 参考资料

阅读(119438) | 评论(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 支持的更多信息,参见 参考资料

阅读(119437) | 评论(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 支持的更多信息,参见 参考资料

阅读(119436) | 评论(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 支持的更多信息,参见 参考资料

阅读(119435) | 评论(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 支持的更多信息,参见 参考资料

阅读(119434) | 评论(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 支持的更多信息,参见 参考资料

阅读(119433) | 评论(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 支持的更多信息,参见 参考资料

阅读(119432) | 评论(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 支持的更多信息,参见 参考资料

阅读(119431) | 评论(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 支持的更多信息,参见 参考资料

阅读(119430) | 评论(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 支持的更多信息,参见 参考资料

阅读(119429) | 评论(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 支持的更多信息,参见 参考资料

阅读(119428) | 评论(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 支持的更多信息,参见 参考资料

阅读(119427) | 评论(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 支持的更多信息,参见 参考资料

阅读(119426) | 评论(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 支持的更多信息,参见 参考资料

阅读(119425) | 评论(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 支持的更多信息,参见 参考资料

阅读(119424) | 评论(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 支持的更多信息,参见 参考资料

阅读(119423) | 评论(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 支持的更多信息,参见 参考资料

阅读(119422) | 评论(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 支持的更多信息,参见 参考资料

阅读(119421) | 评论(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 支持的更多信息,参见 参考资料

阅读(119420) | 评论(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 支持的更多信息,参见 参考资料

阅读(119419) | 评论(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 支持的更多信息,参见 参考资料

阅读(119418) | 评论(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 支持的更多信息,参见 参考资料

阅读(119417) | 评论(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 支持的更多信息,参见 参考资料

阅读(119416) | 评论(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 支持的更多信息,参见 参考资料

阅读(119415) | 评论(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 支持的更多信息,参见 参考资料

阅读(119414) | 评论(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 支持的更多信息,参见 参考资料

阅读(119413) | 评论(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 支持的更多信息,参见 参考资料

阅读(119412) | 评论(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 支持的更多信息,参见 参考资料

阅读(119411) | 评论(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 支持的更多信息,参见 参考资料

阅读(119410) | 评论(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 支持的更多信息,参见 参考资料

阅读(119409) | 评论(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 支持的更多信息,参见 参考资料

阅读(119408) | 评论(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 支持的更多信息,参见 参考资料

阅读(119407) | 评论(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 支持的更多信息,参见 参考资料

阅读(119406) | 评论(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 支持的更多信息,参见 参考资料

阅读(119405) | 评论(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 支持的更多信息,参见 参考资料

阅读(119404) | 评论(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 支持的更多信息,参见 参考资料

阅读(119403) | 评论(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 支持的更多信息,参见 参考资料

阅读(119402) | 评论(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 支持的更多信息,参见 参考资料

阅读(119401) | 评论(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 支持的更多信息,参见 参考资料

阅读(119400) | 评论(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 支持的更多信息,参见 参考资料

阅读(119399) | 评论(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 支持的更多信息,参见 参考资料

阅读(119398) | 评论(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 支持的更多信息,参见 参考资料

阅读(119397) | 评论(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 支持的更多信息,参见 参考资料

阅读(119396) | 评论(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 支持的更多信息,参见 参考资料

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