Chinaunix首页 | 论坛 | 博客
  • 博客访问: 110151700
  • 博文数量: 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博客
  • 博客访问: 110151719
  • 博文数量: 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博客
  • 博客访问: 110151724
  • 博文数量: 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博客
  • 博客访问: 110151728
  • 博文数量: 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博客
  • 博客访问: 110151734
  • 博文数量: 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博客
  • 博客访问: 110151739
  • 博文数量: 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博客
  • 博客访问: 110151734
  • 博文数量: 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博客
  • 博客访问: 110151752
  • 博文数量: 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博客
  • 博客访问: 110151757
  • 博文数量: 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博客
  • 博客访问: 110151763
  • 博文数量: 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博客
  • 博客访问: 110151771
  • 博文数量: 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博客
  • 博客访问: 110151760
  • 博文数量: 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博客
  • 博客访问: 110151781
  • 博文数量: 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博客
  • 博客访问: 110151786
  • 博文数量: 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博客
  • 博客访问: 110151794
  • 博文数量: 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博客
  • 博客访问: 110151801
  • 博文数量: 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博客
  • 博客访问: 110151791
  • 博文数量: 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博客
  • 博客访问: 110151798
  • 博文数量: 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博客
  • 博客访问: 110151800
  • 博文数量: 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博客
  • 博客访问: 110151805
  • 博文数量: 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博客
  • 博客访问: 110151812
  • 博文数量: 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博客
  • 博客访问: 110151817
  • 博文数量: 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博客
  • 博客访问: 110151806
  • 博文数量: 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博客
  • 博客访问: 110151841
  • 博文数量: 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博客
  • 博客访问: 110151846
  • 博文数量: 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博客
  • 博客访问: 110151836
  • 博文数量: 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博客
  • 博客访问: 110151856
  • 博文数量: 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博客
  • 博客访问: 110151863
  • 博文数量: 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博客
  • 博客访问: 110151868
  • 博文数量: 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博客
  • 博客访问: 110151872
  • 博文数量: 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博客
  • 博客访问: 110151866
  • 博文数量: 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博客
  • 博客访问: 110151869
  • 博文数量: 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博客
  • 博客访问: 110151875
  • 博文数量: 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博客
  • 博客访问: 110151881
  • 博文数量: 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博客
  • 博客访问: 110151887
  • 博文数量: 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博客
  • 博客访问: 110151893
  • 博文数量: 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博客
  • 博客访问: 110151882
  • 博文数量: 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博客
  • 博客访问: 110151891
  • 博文数量: 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博客
  • 博客访问: 110151893
  • 博文数量: 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博客
  • 博客访问: 110151898
  • 博文数量: 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博客
  • 博客访问: 110151905
  • 博文数量: 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博客
  • 博客访问: 110151895
  • 博文数量: 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博客
  • 博客访问: 110151917
  • 博文数量: 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博客
  • 博客访问: 110151921
  • 博文数量: 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博客
  • 博客访问: 110151911
  • 博文数量: 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博客
  • 博客访问: 110151932
  • 博文数量: 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博客
  • 博客访问: 110151929
  • 博文数量: 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博客
  • 博客访问: 110151945
  • 博文数量: 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博客
  • 博客访问: 110151947
  • 博文数量: 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博客
  • 博客访问: 110151952
  • 博文数量: 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博客
  • 博客访问: 110151943
  • 博文数量: 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博客
  • 博客访问: 110151946
  • 博文数量: 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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175089) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175088) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175087) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175086) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175085) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175084) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175083) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175082) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175081) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175080) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175079) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175078) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175077) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175076) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175075) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175074) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175073) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175072) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175071) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175070) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175069) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175068) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175067) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175066) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175065) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175064) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175063) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175062) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175061) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175060) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175059) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175058) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175057) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175056) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175055) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175054) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175053) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175052) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175051) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175050) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175049) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175048) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175047) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175046) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175045) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175044) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175043) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175042) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175041) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175040) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(175039) | 评论(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 插入 CUSTOMER 和 PRODUCT 表中。如果不带 -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 将列转换为 CHAR 或 VARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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