收藏 分享(赏)

cobol 存储过程存储和操纵数据.pdf

上传人:kuailexingkong 文档编号:1601972 上传时间:2018-08-10 格式:PDF 页数:12 大小:427.26KB
下载 相关 举报
cobol 存储过程存储和操纵数据.pdf_第1页
第1页 / 共12页
cobol 存储过程存储和操纵数据.pdf_第2页
第2页 / 共12页
cobol 存储过程存储和操纵数据.pdf_第3页
第3页 / 共12页
cobol 存储过程存储和操纵数据.pdf_第4页
第4页 / 共12页
cobol 存储过程存储和操纵数据.pdf_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、 版权所有 IBM 公司 2009 商标在 DB2 for z/OS 中构建 pureXML 应用程序,第 1 部分: 使用COBOL 存储过程存储和操纵数据第 1 页,共 12在 DB2 for z/OS 中构建 pureXML 应用程序,第 1 部分: 使用COBOL 存储过程存储和操纵数据Kirsten A. Larsen资深 IT 专家IBM Jason Cu资深软件工程师IBM Susan Malaika资深技术人员IBM Michael Schenker软件工程师IBM 2009 年 11 月 27 日在本文中,设置并填充一个小型 XML 数据库,为基本数据操作实现 COBOL 存

2、储过程。使用 下载包 中便于安装的示例研究本文讨论的概念,把这些概念应用于其他行业或定制的 XML 格式。这些示例存储和操纵符合 OASIS UBL (Universal Business Language) 格式的 XML 文档。查看本系列更多内容简介本文是 本系列 的第一期,本系列讨论如何在 IBM DB2 for z/OS 中使用 XML。本系列介绍创建操纵 XML 数据的简单应用程序的不同方式。目标是帮助您熟悉 pureXML 技术,展示开发 XML 应用程序是多么容易。可下载的示例还可以作为开发原型的起点。随着 SOA 和基于 Web 的技术日益流行,计算机系统处理的 XML 数据量

3、越来越大了。DB2 9 for z/OS的 pureXML 支持通过 SQL/XML 接口大大简化了在 System z 上存储和操纵 XML 的过程。本文讨论如何创建两类 COBOL 存储过程: 基本操作:在 DB2 for z/OS 中插入、更新和删除 XML 复杂操作:通过指定 XPath 选择 XML,把 XML 分解到关系表中,用关系数据组合出 XMLdeveloperWorks DB2 for z/OS 中构建 pureXML 应用程序,第 1 部分: 使用COBOL 存储过程存储和操纵数据第 2 页,共 12在本文附带的下载包中提供所有存储过程的示例(见 下载)。本文还讨论一些

4、高级概念,例如: 在把 XML 数据传输到和传输出 DB2 for z/OS 中的存储过程时的数据转换。 在 XMLEXISTS 中使用 XPath 筛选数据。系统需求为了安装和运行 COBOL 示例,需要有 DB2 9 for z/OS 和 IBM Enterprise COBOL for z/OS 4.1.0。下载包下载 部分中的下载包包含: COBOL 源代码 推荐的编译器选项列表 8 个示例存储过程的 DDL 存储过程使用的表的 DDL XML 模式文档 在 DB2 中注册模式的脚本 示例 XML 文档 一个演示如何调用存储过程的 Java 程序 README.txt 文件,包含关于如

5、何部署 COBOL 存储过程的说明图 1 显示下载包的内容:图 1. 下载包的内容行业包本文提供的存储过程基于 UBL (Universal Business Language) 2.0 格式。(关于 UBL 的更多信息,请参见 参考资料 中的 OASIS Universal Business Language Technical Committee 网页链接)。可以在文章 “快速构建 DB2 pureXML 应用程序”(developerWorks,2008 年 12 月)中下载其他行业格式的DB2 pureXML 行业包,其中包含表定义、模式、示例文档和查询。可以通过 “XML Schem

6、a Tutorial”了解如何使用示例作为构建原型应用程序的基础(见 参考资料)。几个基本 XML 概念本文假设您熟悉 XML;但是为了更好地说明每个存储过程的用途,我们先来明确几个概念:良构的 XML 文档是一个树的文本表示。树的根是文档本身,每个节点对应于一个元素或字符数据。元素可以包含一系列元素(在这种情况下,相应的树节点有子节点)或字符数据(在这种情况下, developerWorks在 DB2 for z/OS 中构建 pureXML 应用程序,第 1 部分: 使用COBOL 存储过程存储和操纵数据第 3 页,共 12节点是叶节点)。元素可以有属性,属性也映射到子节点;名称空间是一种

7、特殊的属性,它们用来限定名称,以避免在不同 XML 格式的元素之间出现名称冲突。清单 1 给出一个符合(简化的)UBL 2.0 格式的 XML 文档:清单 1. 浏览器中显示的 XML 文档XFB01IYT CorporationAvon WayZZ99 1ZZ3rd Floor, Room 5GB图 2 显示这个文档的树形式:图 2. 树形式的 XML 文档在图 2 中,元素节点显示为蓝色,包括: Invoice cac:AccountingCustomerParty cbc:CustomerAssignedAccountIDdeveloperWorks DB2 for z/OS 中构建

8、pureXML 应用程序,第 1 部分: 使用COBOL 存储过程存储和操纵数据第 4 页,共 12 cac:Party cac:PartyName cbc:Name cac:PostalAddress cbc:StreetName cbc:PostalZone cac:AddressLine cbc:Line cac:Country cbc:IdentificationCode属性节点显示为红色,包括: xmlns:cac xmlns:cbc xmlns:Invoice字符数据节点显示为黑色,包括: XFB01 IYT Corporation Avon Way ZZ99 1ZZ 3rd Fl

9、oor, Room 5 GB注意,所有元素名前面都有一个作为属性声明的名称空间。示例数据库本文的示例(见 下载)使用 XML 格式 UBL 2.0 (Universal Business Language) 的子集。UBL 2.0 是OASIS 为电子商务开发的标准,能够相当全面地满足真实数据的需要。本文使用与发票相关的子集,它需要 11 个 XML 模式文档。关于 OASIS 和 UBL 2.0 的更多信息,请参见 OASIS UniversalBusiness Language (UBL) Technical Committee 网页(见 参考资料)。这个数据库由两个表组成。主表是 UBL

10、ADMIN.UBL,其中包含 XML 数据;另一个表是一个小型的特殊表,用于保存从文档中分解出的数据。第二个表主要用于演示,对于真实的应用程序,第一个表可能就足够了。清单 2. UBLADMIN.UBL 表的列ID INTEGER GENERATED ALWAYS AS IDENTITYCOMMENT VARCHAR(1000)DOCUMENT XML下载 中的 Tables.txt 提供表的 DDL。 developerWorks在 DB2 for z/OS 中构建 pureXML 应用程序,第 1 部分: 使用COBOL 存储过程存储和操纵数据第 5 页,共 12示例存储过程示例存储过程是

11、用 COBOL 编写的。为了更好地说明在 DB2 for z/OS 中操作 XML 实际需要什么,这些存储过程尽可能保持简单。在所有存储过程中,用于 XML 文档的参数类型是 CLOB。目前,存储过程和用户定义函数不支持XML 作为参数,但是很容易作为 CLOB 传递 XML。基本操作本文为 XML 文档提供三种基本操作:插入、更新和删除。这些都是通用操作,可以用于大多数应用程序,甚至是使用非 UBL 2.0 格式的 XML 应用程序,因为这些存储过程本身不包含应用程序或格式特有的代码。在使用 XML 模式时,作为参数传递它。对于插入和更新操作,本文提供两种风格的存储过程:带模式检验的和不带模

12、式检验的。模式检验过程检查 XML 文档是否符合 XML 模式定义的规则和格式。这些规则定义哪些元素是有效的、文档中元素的次序、属性的数据类型、一个元素是必需的还是可选的等等。关于 XML 模式的更多信息,请参见 “XML Schema tutorial”(见 参考资料)。在不带模式检验进行插入或更新时,文档必须是良构的。检验文档需要向 DB2 注册模式。本文提供 UBL 2.0 Invoice 的模式,它由 11 个单独的模式文档组成。本文还提供脚本 Invoice.clp,它通过 DB2 命令行处理程序注册由这些文档组成的模式SYSXSR.UBL_INVOICE_2_0。Samples 文

13、件夹中提供的 XML 文档示例(见 下载)对于这个模式都是有效的。对于插入、更新和删除操作,不带模式检验的存储过程分别是 INSXML、UPDXML 和 DELXML。对于插入和更新操作,带模式检验的存储过程分别是 INSVLXML 和 UPDVLXML。复杂操作另外,本文提供三个用于复杂 XML 数据操作的存储过程。这些操作是与应用程序和格式相关的,不是通用的,必须根据不同的场景调整。对于其他领域和用法,可以以这些示例作为基础进行调整。每个存储过程使用不同的 DB2 XML 构造。本文简要讨论这些构造,详细说明请参见 “DB2 Version9.1. for z/OS, XML Guide”

14、(IBM Corporation,2008 年 12 月)(见 参考资料)。SELXML存储过程 SELXML 使用 XPath 查询 XML 文档中的数据。XPath 是 W3C 推荐的访问 XML 文档中数据的标准,它已经集成在 DB2 中了。XPath 支持在 XML 树中移动、根据节点名称或通过使用 Boolean 表达式选择节点以及对一系列节点应用函数。它接受一个 XML 文档作为输入,返回一系列节点或对一系列节点应用函数的结果。关于XPath 2.0 的更多信息,请参见 “XML Path Language (XPath) 2.0”(W3C,2007 年 1 月)。develope

15、rWorks DB2 for z/OS 中构建 pureXML 应用程序,第 1 部分: 使用COBOL 存储过程存储和操纵数据第 6 页,共 12在 DB2 中,XPath 表达式被包围在一个函数(XMLQUERY 或 XMLEXISTS)中,这个函数应用于一个 XML 列,返回 XML 类型的结果。然后,可以使用函数的输出作为另一个接受 XML 参数的函数的输入,也可以把它转换为等效的 SQL 数据类型。更多信息请参见 “DB2 Version 9.1. for z/OS, XMLGuide”(见 参考资料)。SELXML 中使用的 XPath 表达式见清单 3:清单 3. SELXML

16、 中使用的 XPath 表达式declare default element namespaceurn:oasis:names:specification:ubl:schema:xsd:Invoice-2;declare namespace cbc=urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2;declare namespace cac=urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2;/Invoicecac

17、:PaymentMeans/cbc:PaymentDueDate=$PAYMENTDATE/cac:LegalMonetaryTotal/cbc:PayableAmount表达式的第一部分包含名称空间声明(在这里是 UBL 2.0 Invoice)和一些辅助名称空间;这些名称空间用于确保使用的所有元素名的惟一性。XPath 表达式的第二部分在 XML 树中通过节点 Invoice 和 LegalMonetaryTotal 移动到PayableAmount,如果方括号中的 Boolean 表达式是 true,就返回这个元素。这个 Boolean 表达式要求 PaymentDueDate(Invo

18、ice 的子节点 PaymentMeans 的子节点)必须等于 $PAYMENTDATE(由主机变量提供的一个值)。简单地说,如果应付款日期与主机变量中提供的值匹配,它就返回应支付金额。这个 XPath 表达式与存储过程中的其他 SQL 相结合,返回在输入的日期应该支付的总金额。SHREDXML存储过程 SHREDXML 使用 DB2 函数 XMLTABLE 把 XML 文档分解为关系数据,它指定一个在 XML 文档中移动的 XPath,以表的形式返回结果。可以使用它把 XML 数据与关系数据结合在一起。可以以许多不同的方式使用 XMLTABLE 函数。SHREDXML 包含下面三个组成部分:

19、 UBL 2.0 Invoice 的名称空间声明和辅助名称空间。 一个上下文项,它是一个 XPath 表达式,指向作为列表达式的起点的节点(即AccountingCustomerParty)。 所需的表列的列定义。这包括名称、数据类型和一个 XPath 表达式(使用上下文项作为起点定义列内容)。定义的列包括 ACCOUNT_ID、NAME、CONT_PERSON、PHONE 和 EMAIL。这样就可以为 UBL 2.0 Invoice 文档创建一个关系视图,提供详细的客户联系信息。提供的 DDL 中的 UBLADMIN.CUSTOMER 表与这个存储过程的输出格式匹配。TAGXML存储过程 T

20、AGXML 使用 XMLELEMENT 和其他相似的 DB2 发布函数用关系数据组合出 XML 文档。发布函数用 SQL 值或其他 XML 值构造 XML 值。表 1 描述一些最常用的发布函数。 developerWorks在 DB2 for z/OS 中构建 pureXML 应用程序,第 1 部分: 使用COBOL 存储过程存储和操纵数据第 7 页,共 12表 1. 常用的发布函数名称 说明XMLDOCUMENT 返回一个 XML 值,其中有一个文档节点和零个或更多子节点。XMLNAMESPACES 根据参数构造名称空间声明。XMLELEMENT 返回一个 XML 值,它是一个 XML 元素

21、节点。XMLATTRIBUTES 根据参数构造 XML 属性。XMLCONCAT 返回数量可变的 XML 输入参数的串联结果。XMLFOREST 返回一个 XML 值,它是一系列 XML 元素节点。发布函数的作用与 XMLTABLE 函数相反。为了强调这一点,本文使用 TAGXML 实现与 SHREDXML 正好相反的功能(换句话说,它用关系表中的详细客户联系信息组合出 XML 元素)。UBLADMIN.CUSTOMER 表是组合 XML 元素的起点,生成的 XML 元素具有与相应的 UBL 2.0 Invoice 子集相同的内部结构。部署存储过程只需五个简单的步骤即可完成存储过程的部署:1.

22、通过运行 Tables.txt 中提供的 DDL 在 DB2 中创建表(见 下载),例如可以使用 SPUFI。2.使用您系统上可用的过程对每个 COBOL 装载模块进行编译、链接编辑和部署并绑定 DBRM。在子文件夹 COBOL source 中可以找到 8 个存储过程的 COBOL 源代码,其中的 Compileroptions.txt 文件列出推荐的编译器选项(见 下载)。请注意,需要 QUOTE 和 QUOTESQL 选项。3.通过运行 SP.txt 中提供的 DDL 创建存储过程(见 下载),例如可以使用 SPUFI。这个文件包含所有存储过程的 DDL;如果不希望实现所有存储过程,可以

23、在实现之前从文件中删除它们。在运行之前,做以下修改:a.把 WLM 环境改为您站点上运行 COBOL 存储过程的环境。(当前名称是 DSN9WL4K)。b.把集合 id 改为您要为存储过程使用的集合。(当前名称是 UBLADMIN)。4.在 Windows 计算机上,通过 DB2 命令行处理程序运行脚本 Invoice.clp,从而注册 XML 模式UBL 2.0 Invoice:a.通过从 Start 菜单运行 db2cmd,打开 DB2 命令行处理程序。b.连接希望注册 XML 模式的 DB2 子系统。c.进入 Schema 文件夹。d.通过输入以下命令,运行 Invoice.clp 文件

24、中的命令: db2 -f Invoice.clp5.使用提供的 Java 程序 testStoredProcedures.java 和 Samples 文件夹中的测试数据测试存储过程(见 下载)。a.在程序中修改连接 DB2 for z/OS 所需的信息。这包括主机名(z/OS 系统的 IP 地址或逻辑名称)、端口号、DB2 子系统的位置以及用于连接的用户 id 和密码。b.打开一个 Windows 命令提示,进入 COBOL 存储过程的 samples 文件夹。c.用 javac testStoredProcedures.java 命令编译程序。d.用 java testStoredProc

25、edure 命令运行程序,其中的 是要测试的存储过程的名称。注意,值硬编码在测试程序中,所以只有某些测试序列是有意义的。详细信息请参见 README.txt 文件(见 下载)或程序本身。developerWorks DB2 for z/OS 中构建 pureXML 应用程序,第 1 部分: 使用COBOL 存储过程存储和操纵数据第 8 页,共 12高级考虑因素数据转换在提供的示例中,使用 CLOB 在存储过程传入和传出 XML 值。有时候,BLOB 更适合传输 XML,这可以避免在进入和退出存储过程时进行数据转换。数据转换会消耗大量 CPU 处理时间,而且如果过渡编码页无法表示 XML 中出

26、现的某些字符,就会丢失数据。本文提供的示例使用 CLOB,因为操纵基于字符的变量更容易。在使用 CLOB 时,为了避免不必要的过渡数据转换,可以在存储过程参数声明中指定 CCSIDUNICODE for MIXED DATA。由于禁止了转换,COBOL 存储过程程序员必须知道 XML 变量包含UTF-8 数据,而 COBOL 存储过程中的其他变量很可能采用 EBCDIC 编码。在指定了 CCSID UNICODE for MIXED DATA 时,DB2 for z/OS 忽略 XML 文档头中的内部编码声明,把内容当作 UTF-8。DB2 for z/OS 总是以 UTF-8 编码存储 XM

27、L。图 3 说明在指定和不指定 CCSID UNICODE for MIXED DATA 两种情况下发生的情况:图 3. 过渡编码页转换用 XPath 筛选数据可以用 XPath 筛选数据。XMLEXISTS 是一个 Boolean 函数,它接受一个 XPath 表达式作为输入;如果这个 XPath 表达式返回空序列,它会返回 FALSE,否则返回 TRUE。可以在 SQL 语句的 WHERE 子句中使用它只选择那些对于 XPath 表达式返回非空 XML 值的行。XMLEXISTS 使用的 XPath 表达式语法与 XMLQUERY 使用的 XPath 表达式语法相同。相关示例见存储过程 D

28、ELXML(见 下载)。结束语本文是 本系列 的第一期,本系列讨论如何在 DB2 for z/OS 中存储和操作 XML。本文讲解了如何创建和部署在 DB2 for z/OS 中存储和操作 XML 的 COBOL 存储过程。这里使用 UBL 行业格式作为示例数据的基础。也可以使用其他行业格式和定制的 XML 文档。 developerWorks在 DB2 for z/OS 中构建 pureXML 应用程序,第 1 部分: 使用COBOL 存储过程存储和操纵数据第 9 页,共 12下载描述 名字 大小示例 Cobol 存储过程 COBOLSPs.zip 142KBdeveloperWorks

29、DB2 for z/OS 中构建 pureXML 应用程序,第 1 部分: 使用COBOL 存储过程存储和操纵数据第 10 页,共 12参考资料学习 OASIS Universal Business Language (UBL) Technical Committee 网页:了解关于 UniversalBusiness Language (UBL) 的更多信息。 “XML Path Language (XPath) 2.0”(W3C,2007 年 1 月):了解关于 XPath 语言的更多信息。 “DB2 Version 9.1. for z/OS, XML Guide”(IBM Corpor

30、ation,2008 年 12 月):了解关于pureXML(DB2 for z/OS 对 XML 的支持)的更多信息。学习如何在 DB2 数据库中存储和获取XML 数据。 Industry Formats and Services with pureXML:通过这个演示程序,了解如何在 pureXML 数据库中简便地存储和查询采用特定行业格式的 XML 而不需要映射。 “快速构建 DB2 pureXML 应用程序”(developerWorks,2008 年 12 月):使用全程 XML 体系结构在一天内构建一个完整的 DB2 应用程序。 XML Schema tutorial():了解如何

31、创建 XML 模式、XML 模式为什么比 DTD 更强大以及如何在应用程序中使用 XML 模式。 developerWorks 上的 DB2 for z/OS 专题:寻找提高 DB2 for z/OS 技能所需的参考资料。 developerWorks 上的 Information Management and XML 页面:寻找提高 pureXML 技能所需的参考资料。 developerWorks Information Management 专区:学习关于 Information Management 的更多知识。在这里可以找到技术文档、how-to 文章、培训、下载、产品信息等等。 随

32、时关注 developerWorks 技术活动 和 网络广播。获得产品和技术 下载 IBM 产品评估试用版软件 或在 IBM SOA Sandbox 中在线试用,试用这些来自DB2、Lotus、Rational、Tivoli 和 WebSphere 的应用程序开发工具和中间件产品。讨论 参与与本文档相关的论坛讨论。 参与 developerWorks blogs 并加入 developerWorks 社区。 developerWorks在 DB2 for z/OS 中构建 pureXML 应用程序,第 1 部分: 使用COBOL 存储过程存储和操纵数据第 11 页,共 12作者简介Kirste

33、n A. LarsenKirsten Ann Larsen 是 IBM Nordics 的资深 IT 专家和 IT 交付技术负责人。她在 DB2 forz/OS 领域有十年以上的经验,曾经与人合著了一份关于 DB2 安全性的 Redbook。自从2007 年 DB2 9 中引入 pureXML 以来,她一直从事 XML。Jason CuJason Cu 是 IBM Silicon Valley Laboratory 的 DB2 for z/OS 组中的资深软件工程师。他从UC Berkeley 获得了计算机科学学士学位,之后于 1998 年加入 IBM 从事 DB2。在此期间,Jason 参与

34、过 SQL 开发项目并于 2004 年加入 XML 团队,他现在是 XPath 开发团队的负责人。Susan MalaikaSusan Malaika 在 IBM Information Management Group 工作。她的专长包括 XML、Web技术和网格计算。她与人合作出版了关于 Web 的专著,发表了关于 Web 的文章。她是IBM Academy of Technology 的成员。Michael SchenkerMichael Schenker 是加州 San Jose 的 IBM Silicon Valley Laboratory 的软件工程师。他于2002 年加入 IBM,从事 IBM Data Server Tooling 领域。他专长的领域是在 IBM 数据服务器上启用 Web 服务。他从德国 Leipzig 的 University of Applied Sciences 获得了计算机科学硕士学位。developerWorks DB2 for z/OS 中构建 pureXML 应用程序,第 1 部分: 使用COBOL 存储过程存储和操纵数据第 12 页,共 12 版权所有 IBM 公司 2009(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报