Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90877697
  • 博文数量: 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博客
  • 博客访问: 90877698
  • 博文数量: 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博客
  • 博客访问: 90877699
  • 博文数量: 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博客
  • 博客访问: 90877700
  • 博文数量: 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博客
  • 博客访问: 90877701
  • 博文数量: 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博客
  • 博客访问: 90877702
  • 博文数量: 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博客
  • 博客访问: 90877703
  • 博文数量: 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博客
  • 博客访问: 90877694
  • 博文数量: 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博客
  • 博客访问: 90877705
  • 博文数量: 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博客
  • 博客访问: 90877706
  • 博文数量: 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博客
  • 博客访问: 90877707
  • 博文数量: 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博客
  • 博客访问: 90877708
  • 博文数量: 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博客
  • 博客访问: 90877709
  • 博文数量: 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博客
  • 博客访问: 90877710
  • 博文数量: 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博客
  • 博客访问: 90877711
  • 博文数量: 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博客
  • 博客访问: 90877712
  • 博文数量: 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博客
  • 博客访问: 90877713
  • 博文数量: 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博客
  • 博客访问: 90877714
  • 博文数量: 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博客
  • 博客访问: 90877715
  • 博文数量: 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博客
  • 博客访问: 90877716
  • 博文数量: 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博客
  • 博客访问: 90877717
  • 博文数量: 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博客
  • 博客访问: 90877718
  • 博文数量: 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博客
  • 博客访问: 90877709
  • 博文数量: 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博客
  • 博客访问: 90877720
  • 博文数量: 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博客
  • 博客访问: 90877721
  • 博文数量: 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博客
  • 博客访问: 90877722
  • 博文数量: 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博客
  • 博客访问: 90877723
  • 博文数量: 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博客
  • 博客访问: 90877724
  • 博文数量: 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博客
  • 博客访问: 90877725
  • 博文数量: 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博客
  • 博客访问: 90877726
  • 博文数量: 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博客
  • 博客访问: 90877727
  • 博文数量: 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博客
  • 博客访问: 90877728
  • 博文数量: 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博客
  • 博客访问: 90877729
  • 博文数量: 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博客
  • 博客访问: 90877730
  • 博文数量: 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博客
  • 博客访问: 90877731
  • 博文数量: 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博客
  • 博客访问: 90877732
  • 博文数量: 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博客
  • 博客访问: 90877733
  • 博文数量: 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博客
  • 博客访问: 90877724
  • 博文数量: 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博客
  • 博客访问: 90877735
  • 博文数量: 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博客
  • 博客访问: 90877736
  • 博文数量: 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博客
  • 博客访问: 90877737
  • 博文数量: 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博客
  • 博客访问: 90877738
  • 博文数量: 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博客
  • 博客访问: 90877739
  • 博文数量: 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博客
  • 博客访问: 90877740
  • 博文数量: 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博客
  • 博客访问: 90877741
  • 博文数量: 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博客
  • 博客访问: 90877742
  • 博文数量: 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博客
  • 博客访问: 90877743
  • 博文数量: 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博客
  • 博客访问: 90877744
  • 博文数量: 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博客
  • 博客访问: 90877745
  • 博文数量: 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博客
  • 博客访问: 90877746
  • 博文数量: 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博客
  • 博客访问: 90877747
  • 博文数量: 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博客
  • 博客访问: 90877748
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:26:21

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

developerWorks



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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    C:\>chcp
    Active code page: 1252

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162872) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162871) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162870) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162869) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162868) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162867) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162866) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162865) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162864) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162863) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162862) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162861) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162860) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162859) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162858) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162857) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162856) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162855) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162854) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162853) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162852) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162851) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162850) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162849) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162848) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


DB2 Command Line Processor (CLP) 行为和选项

如果运行 DB2 Command Line Processor (CLP) 来学习 pureXML,那么要清楚以下 CLP 行为,以及可以改变 CLP 行为的 CLP 选项。这在考试中不大可能考到,但是在本教程中还是值得一提,因为这种行为可能会使您误解 DB2 是如何处理 XML 的。

  • CLP 从一个 SELECT 语句中以一个 4 KB 的字符列的形式返回 XML。如果 XML 输出不够长,则尾部以空格填充。标题和结果集可以在屏幕上滚动。

  • CLP db2 并不总是能够串行化它所成功地插入的 XML 数据:

    C:\>chcp
    Active code page: 1252

    Σ 是对希腊字母大写西格马(sigma)的 XML 数字引用。当选择这个 XML 文档时,不管码页是 1252 还是 437,即使西格马是码页 437 中的字符,CLP 仍然会返回一个错误。

    C:\>db2 -v "insert into catalog values ('Ref3', 'Σ')"
    insert into catalog values ('Ref3', 'Σ')
    DB20000I  The SQL command completed successfully.
    
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W
    
    C:\>db2 ? 2200W
    SQLSTATE 2200W: An XML value contained data that could not be serialized.
    
    C:\>chcp 437
    Active code page: 437
    
    C:\>db2 -x "select catlog from catalog where name = 'Ref3'"
    SQL0969N  There is no message text corresponding to SQL error "-20412" in the
    message file on this workstation.  The error was returned from module
    "SQLABOLB" with original tokens "".  SQLSTATE=2200W

    JDBC 应用程序可以读取这个 XML。串行化 XML AS VARCHAR 可以避免 CLP 错误,但是西格马会丢失,而被看上去像一个方框的 DOS 文件终止符 Control-Z 替代。

    C:\>db2 -x "select xmlserialize(catlog as varchar(90))
    from catalog where name = 'Ref3'"
    [box]

  • CLP 通常会将传入的字符串文字中包含一个换行的空白剥离掉,换成一个空格。这个行为可能掩饰了 XML 解析和验证(见 本教程中前面关于此话题的小节 中对空白的处理。)这不是特定于 XML 的,因此 CLP 不仅对 XML 边界空白做这样的替换,还对包含至少一个换行的任何空白字符串做这样的替换。CLP 不改变不包含换行的空白。两个 CLP 选项 -n-q 可以改变这种行为。

    作为演示,下面是一个 SQL 脚本,该脚本插入一个 XML 文档。XML 中的文本将紧随其后的空白编入文档;例如,在 1 space + NL + 1 space: 后面,有一个空格,接着有一个换行,然后又是一个空格。在下面的代码和输出清单中,每一行的最后显示一个美元符号,以表明哪里是行的结尾,哪里是空白(就像在 vi 命令 :%l 中一样)。对于为了提高可读性而必须拆分为两行的行,用一个反斜杠 (\)结束第一行,然后在下一行的左侧开始接上一行。用于填充 XML 结果,使之达到 4 KB 的空格字符串被忽略。

    delete from catalog where name = 'foo';$
    insert into catalog (name, catlog) values ($
    'foo',$
    xmlparse(document '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace)$
    );$
    select catlog from catalog where name = 'foo';$

    如果不带 -q-n 选项运行该脚本,则会发生如下行为:

    C:\>db2 -xtvf testWhitespace.sql > testws-no_opts.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: 3 spaces:   NL: ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: 3 spaces:   NL: $

    • 一个空格加一个换行再加一个空格,这些被替换为一个空格。
    • 不含换行的三个空格没有变化。
    • 一个换行变成一个空格。

    如果带 -n 选项运行该脚本,则 CLP 将去掉换行,但是保持换行附近的空格不变:

    C:\>db2 -xntvf testWhitespace.sql > testws-n.txt
    
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space:  3 spaces:   NL:' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space:  3 spaces:   NL:$
    $

    • 一个空格加一个换行再加一个空格,这些被替换为两个空格。
    • 不含换行的三个空格同样没有变化。
    • 一个换行被去掉。

    如果使用 -q 选项(它覆盖 -n 选项), CLP 保持所有空白不变:

    C:\>db2 -xqtvf testWhitespace.sql > testws-q.txt
    delete from catalog where name = 'foo'$
    DB20000I  The SQL command completed successfully.$
    $
    insert into catalog (name, catlog) values ( 'foo', xmlparse(document \
    '1 space + NL + 1 space: $
     3 spaces:   NL:$
    ' preserve whitespace) )$
    DB20000I  The SQL command completed successfully.$
    $
    select catlog from catalog where name = 'foo'$
    1 space + NL + 1 space: $
     3 spaces:   NL:$
    $
    $

    如果插入包含换行的 “美观的” XML,或者用显式的 XMLPARSE() 和参数 PRESERVE WHITESPACE 插入 XML,为了保留边界空白(见 本教程前面关于此话题的小节),记住这一点很重要。

    该行为可能会影响安装目录下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句 XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) ) 将 XML 插入 CUSTOMERPRODUCT 表中。如果不带 -q 选项运行 db2sample_XML.db2,那么 CLP 在 XML 到达 XML 解析器之前将剥离大部分空白。

  • CLP 选项 -v 在命令执行之前回显命令。为了确定 DB2 执行什么样的 SQL -- 例如,为了确定是否转义命令行上的引号之类的字符,或者为了确定是使用 -n 选项还是 -q 选项,这个选项很有用。

  • CLP 选项 -i 采用缩进的方式 “美观地打印” XQuery 的结果:

    • 每个标记和每个文本节点独占一行。
    • 每个开始标记与其对应的结束标记垂直对齐。
    • 每个元素或文本节点相对于其父元素缩进。

    为此,CLP 不仅添加边界空白,而且为非空元素添加空白。该选项对 SQL SELECT 没有影响:在一个普通的 SELECT 中,CLP 返回具有固定长度的列中的数据,因此必须以常规的字符串的形式返回 XML。

  • -x 忽略列标题、由短横线组成的行和消息 number record(s) selected,以减少输出的数据量。在 SELECT 中,CLP 仍然用空格填充 XML,使之大小达到 4 KB。

  • -d 获取并显示结果中的 XML 声明。在 Windows 上,不管当前码页是什么(可用 DOS 命令 CHCP 来设置),encoding 属性都是 windows-1252。如果用XMLSERIALIZE(column INCLUDING XMLDECLARATION) 选择 XML,则该选项没有影响:因为是由 DB2 来生成声明(用 encoding="UTF-8"),而不是由 CLP 来生成声明。和子句 INCLUDING XMLDECLARATION 一样,不管最初插入的 XML 是否包含声明,选项 -d 都能起作用:声明是生成的,不是从存储中获取的。

  • -td 指定除分号外的一个 SQL 语句结束符。当运行包含分号的 XQuery 时,该选项是必需的。取决于查询的内容,可能的结束符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 通过添加一个显式的 XMLSERIALIZE(),或者使用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(162847) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~