DB2 9 利用开辟(733 测验)认证指南,第 3 局部: XML 数据操纵(10)

颠末利用挨次存储和检索 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', '<sigma>&#x3a3;</sigma>')"
    insert into catalog values ('Ref3', '<sigma>&#x3a3;</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 拔出 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<terminator> 指定除分号外的一个 SQL 语句完毕符。当运转包括分号的 XQuery 时,该选项是必需的。取决于盘问的内容,可以大年夜概的完毕符有磅字符(#)、重音符(`)和脱字符号(^)。

  • 颠末添加一个显式的 XMLSERIALIZE(),大年夜约运用 CAST() AS 将列转换为 CHARVARCHAR 类型,可以减小 CLP 从一个 SELECT 中前往的数据的大小。但是要清楚,这样做可以大年夜概改变文档的编码体式格局。





版权声明: 原创作品,批准转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。不然将追究法律责任。

posted @ 2011-03-06 23:50  蓝色的天空III  阅读(317)  评论(0编辑  收藏  举报