DB2 9 利用开辟(733 测验)认证指南,第 3 局部: XML 数据操纵(10)
颠末利用挨次存储和检索 XML
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', '<sigma>Σ</sigma>')" insert into catalog values ('Ref3', '<sigma>Σ</sigma>') 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'" </sigma>[box]</sigma>
-
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 '<a>1 space NL 1 space: $ 3 spaces: NL:$ </a>' 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 \ '<a>1 space NL 1 space: 3 spaces: NL: </a>' preserve whitespace) )$ DB20000I The SQL command completed successfully.$ $ select catlog from catalog where name = 'foo'$ <a>1 space NL 1 space: 3 spaces: NL: </a>$
- 一个空格加一个换行再加一个空格,这些被更换为一个空格。
- 不含换行的三个空格没有改变。
- 一个换行酿成一个空格。
倘若带
-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 \ '<a>1 space NL 1 space: 3 spaces: NL:</a>' preserve whitespace) )$ DB20000I The SQL command completed successfully.$ $ select catlog from catalog where name = 'foo'$ <a>1 space NL 1 space: 3 spaces: NL:</a>$ $
- 一个空格加一个换行再加一个空格,这些被更换为两个空格。
- 不含换行的三个空格异常没有改变。
- 一个换行被去掉。
倘若运用
-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 \ '<a>1 space NL 1 space: $ 3 spaces: NL:$ </a>' preserve whitespace) )$ DB20000I The SQL command completed successfully.$ $ select catlog from catalog where name = 'foo'$ <a>1 space NL 1 space: $ 3 spaces: NL:$ </a>$ $
倘若拔出包括换行的 “美不美观的” XML,大年夜约用显式的
XMLPARSE()
和参数PRESERVE WHITESPACE
拔出 XML,为了生存鸿沟空白(见 本教程后面关于此话题的末节),记住这一点很求助。
该活动可以大年夜概会影响安排目次下 SQLLIB\samples\xml\db2sample_xml.db2 中的示例脚本中的语句。该脚本用子句
XMLVALIDATE( XMLPARSE( DOCUMENT '...' PRESERVE WHITESPACE ) )
将 XML 拔出CUSTOMER
和PRODUCT
表中。倘若不带-q
选项运转 db2sample_XML.db2,那么 CLP 在 XML 抵达 XML 分析器之前将剥离大年夜局部空白。
-
CLP 选项
-v
在命令实行之前回显命令。为了确定 DB2 实行什么样的 SQL -- 比方,为了确定可否本义命令行上的引号之类的字符,大年夜约为了确定是运用-n
选项照样-q
选项,这个选项很有用。
-
CLP 选项
-i
采用缩进的体式格局 “美不美观地打印” XQuery 的成效:
- 每个符号和每个文本节点独有一行。
- 每个开始符号与其对应的完毕符号垂直对齐。
- 每个元素或文本节点相唐塞其父元素缩进。
为此,CLP 不只添加鸿沟空白,而且为非空元素添加空白。该选项对 SQL
SELECT
没有影响:在一个浅显的SELECT
中,CLP 前往具有固定长度的列中的数据,是以必需以惯例的字符串的形式前往 XML。
-
-x
马虎列成果、由短横线组成的行和新闻number record(s) selected
,以增添输出的数据量。在SELECT
中,CLP 照旧用空格添补 XML,使之大小到达 4 KB。
-
-d
获取并体现成效中的 XML 声明。在 Windows 上,不论此后码页是什么(可用 DOS 命令CHCP
来设置),encoding
属性都是windows-1252
。倘若用XMLSERIALIZE(column INCLUDING XMLDECLARATION)
选择 XML,则该选项没有影响:因为是由 DB2 来天生声明(用encoding="UTF-8"
),而不是由 CLP 来天生声明。和子句INCLUDING XMLDECLARATION
一样,不论最后拔出的 XML 可否包括声明,选项-d
都能起感化:声明是天生的,不是从存储中获取的。
-
-td<terminator>
指定除分号外的一个 SQL 语句完毕符。当运转包括分号的 XQuery 时,该选项是必需的。取决于盘问的内容,可以大年夜概的完毕符有磅字符(#
)、重音符(`
)和脱字符号(^
)。
-
颠末添加一个显式的
XMLSERIALIZE()
,大年夜约运用CAST()
AS
将列转换为CHAR
或VARCHAR
类型,可以减小 CLP 从一个SELECT
中前往的数据的大小。但是要清楚,这样做可以大年夜概改变文档的编码体式格局。
版权声明: 原创作品,批准转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。不然将追究法律责任。