简介
与以前的 DB2 版本相比,IBM® DB2® 9 for Linux, UNIX®, and Windows® 的主要改进是添加了新的 XML 功能。在 DB2 9 之前,可以将 XML 文档存储为 LOB,或者将传入的 XML 数据分解到关系表中,这个过程需要使用 XML Extender。但是,DB2 9 使用户能够按照 XML 固有的层次化格式存储和查询 XML 数据 —— 这种技术称为 pureXML™ 支持。现在,可以在 XML 数据上建立索引,并通过调用存储过程执行分解。
本文讨论如何在 SQL 存储过程中使用 XML。我提供了许多代码示例来帮助演示特定的技术要点。提供示例的目的在于帮助您理解,因此示例要尽可能简单。为此,示例可能有点儿不够真实。
XML 简介
XML 表示 “可扩展标记语言(extensible markup language)”,这是一种表示信息的层次化方法,它的语法与 HTML 非常相似。XML 文档是一个由 “元素(element)” 或分支组成的树结构。每个元素有名称,可以包含文本值,可以具有一系列属性(格式为 “name=value”),可以有子元素。允许重复的元素名称,但是一个元素中的属性名称必须是惟一的。
XQuery 是一种用于 XML 的查询语言,它基于 W3C 标准。XQuery 常用于在关系数据库外查询 XML 数据,这些数据可能存储在文本文件中。XQuery 可以访问 XML 数据(包括联结)、循环、声明的变量、IF/THEN/ELSE 语句和其他结构。
在 DB2 9 中有四种处理 XML 数据的方式:
- 一般 SQL
一般 SQL 由常规 SQL 语句和函数组成,它们没有引用 XPath 或 XQuery。一般 SQL 只能将 XML 文档作为完整的实体进行操作。可以在数据库中插入和检索 XML 文档,以及在实体和文本之间进行转换。但是,无法解析 XML 文档的一部分,也无法应用任何谓词。
- 带嵌入 XQuery 的 SQL/XML
SQL/XML 包含三个操作 XML 数据的新函数,这些函数以嵌入的 XQuery 命令作为参数 —— XMLQUERY、XMLEXISTS 和 XMLTABLE。
- XMLQUERY 用来从 XML 数据中提取信息。通过结合使用 XMLCAST 函数,可以从 XML 中派生出关系数据。
- XMLEXISTS 对 XML 数据应用谓词,常常用在 WHERE 子句中。
- XMLTABLE 以关系表的形式提取 XML 数据。
- XQuery
XQuery 现在是 DB2 数据库引擎中的本机特性。有两个用来访问 DB2 数据的函数。第一个函数 db2-fn:xmlcolumn 向 XQuery 返回 XML 列的值。包含所有行;没有谓词。
- 带嵌入 SQL 的 XQuery
还提供 db2-fn:sqlquery 函数来访问 DB2 数据,它以一个 SELECT 语句作为参数。这个 SELECT 可以执行所需的任何操作,但是必须在 SELECT 列表中返回一个 XML 类型的列。
