zoukankan      html  css  js  c++  java
  • 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 中前往的数据的大小。但是要清楚,这样做可以大年夜概改变文档的编码体式格局。





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

  • 相关阅读:
    SpringBoot构建大数据开发框架
    阿里云 docker连接总报超时 registry.cn-hangzhou.aliyuncs.com (Client.Timeout exceeded while awaiting headers
    这些保护Spring Boot 应用的方法,你都用了吗?
    那些年让你迷惑的阻塞、非阻塞、异步、同步
    spring data jpa 分页查询
    如何在Windows 10上运行Docker和Kubernetes?
    Spring Mvc和Spring Boot配置Tomcat支持Https
    Why I don't want use JPA anymore
    Spring Data JPA Batch Insertion
    MySQL 到底能不能放到 Docker 里跑?
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1972854.html
Copyright © 2011-2022 走看看