Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103067609
  • 博文数量: 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博客
  • 博客访问: 103067620
  • 博文数量: 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博客
  • 博客访问: 103067621
  • 博文数量: 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博客
  • 博客访问: 103067622
  • 博文数量: 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博客
  • 博客访问: 103067623
  • 博文数量: 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博客
  • 博客访问: 103067624
  • 博文数量: 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博客
  • 博客访问: 103067625
  • 博文数量: 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博客
  • 博客访问: 103067626
  • 博文数量: 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博客
  • 博客访问: 103067627
  • 博文数量: 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博客
  • 博客访问: 103067628
  • 博文数量: 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博客
  • 博客访问: 103067629
  • 博文数量: 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博客
  • 博客访问: 103067631
  • 博文数量: 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博客
  • 博客访问: 103067632
  • 博文数量: 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博客
  • 博客访问: 103067633
  • 博文数量: 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博客
  • 博客访问: 103067624
  • 博文数量: 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博客
  • 博客访问: 103067635
  • 博文数量: 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博客
  • 博客访问: 103067636
  • 博文数量: 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博客
  • 博客访问: 103067637
  • 博文数量: 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博客
  • 博客访问: 103067638
  • 博文数量: 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博客
  • 博客访问: 103067639
  • 博文数量: 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博客
  • 博客访问: 103067640
  • 博文数量: 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博客
  • 博客访问: 103067641
  • 博文数量: 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博客
  • 博客访问: 103067642
  • 博文数量: 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博客
  • 博客访问: 103067643
  • 博文数量: 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博客
  • 博客访问: 103067644
  • 博文数量: 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博客
  • 博客访问: 103067645
  • 博文数量: 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博客
  • 博客访问: 103067646
  • 博文数量: 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博客
  • 博客访问: 103067647
  • 博文数量: 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博客
  • 博客访问: 103067648
  • 博文数量: 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博客
  • 博客访问: 103067639
  • 博文数量: 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博客
  • 博客访问: 103067651
  • 博文数量: 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博客
  • 博客访问: 103067652
  • 博文数量: 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博客
  • 博客访问: 103067653
  • 博文数量: 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博客
  • 博客访问: 103067655
  • 博文数量: 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博客
  • 博客访问: 103067656
  • 博文数量: 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博客
  • 博客访问: 103067658
  • 博文数量: 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博客
  • 博客访问: 103067659
  • 博文数量: 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博客
  • 博客访问: 103067660
  • 博文数量: 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博客
  • 博客访问: 103067661
  • 博文数量: 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博客
  • 博客访问: 103067662
  • 博文数量: 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博客
  • 博客访问: 103067663
  • 博文数量: 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博客
  • 博客访问: 103067654
  • 博文数量: 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博客
  • 博客访问: 103067665
  • 博文数量: 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博客
  • 博客访问: 103067666
  • 博文数量: 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博客
  • 博客访问: 103067667
  • 博文数量: 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博客
  • 博客访问: 103067668
  • 博文数量: 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博客
  • 博客访问: 103067669
  • 博文数量: 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博客
  • 博客访问: 103067670
  • 博文数量: 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博客
  • 博客访问: 103067671
  • 博文数量: 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博客
  • 博客访问: 103067672
  • 博文数量: 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博客
  • 博客访问: 103067673
  • 博文数量: 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博客
  • 博客访问: 103067674
  • 博文数量: 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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169837) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169836) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169835) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169834) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169833) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169832) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169831) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169830) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169829) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169828) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169827) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169826) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169825) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169824) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169823) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169822) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169821) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169820) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169819) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169818) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169817) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169816) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169815) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169814) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169813) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169812) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169811) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169810) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169809) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169808) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169807) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169806) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169805) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169804) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169803) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169802) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169801) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169800) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169799) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169798) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169797) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169796) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169795) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169794) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169793) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169792) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169791) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169790) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169789) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169788) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

阅读(169787) | 评论(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 中返回的数据的大小。但是要清楚,这样做可能改变文档的编码方式。

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