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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563911
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563912
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563913
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563904
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563915
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563916
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563917
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563918
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563919
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563920
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563922
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563923
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563924
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563925
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563926
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563927
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563928
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563919
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563930
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563931
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563932
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563933
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563934
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563935
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563936
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563937
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563938
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563939
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563940
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563941
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563942
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563943
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563934
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563945
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563946
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563947
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563949
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563953
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563955
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563957
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563949
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563961
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563963
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563965
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563967
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563969
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563971
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563972
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563964
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563976
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 3 部分: XML 数据操纵(10)-sdccf-ChinaUnix博客
  • 博客访问: 104563978
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

通过应用程序存储和检索 XML

developerWorks



DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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