技术开发 频道

DB2 9:XML数据和关系数据相互转化


IT168技术文档】 
    从XMl数据产生表格来产生关系数据
    在上述给出的实例中,我们可能有这样的需求,查询客户的姓名,年龄和传真。这里姓名和年龄是关系数据,而传真是存储在XML字段中的,属于XML数据。虽然我们通过SQL/XML能够来完成。但是如果频繁的进行类似的查询,可能会显得不是很方便。我们可以通过创建视图来建一张关系数据表,即形成我们按照纯关系数据库来建立的客户表。其形式可能为:


    这里,实际上我们就是要检索多个 XML 元素并将每个元素转换成传统的 SQL 数据类型。 

    为了实现这样的形式,我们可以使用SQL/XML语句来实现。
select i.NAME, i.AGE,t.fax,t.email from CUSTOMERS i , xmltable('$c/Customer' passing i.CONTACTINFO as "c" columns fax varchar(100) path 'fax', email varchar(100) path 'email' ) as t where NAME='Smith'
    第一行指定将包含在结果集中的列。查询中后面的几行表明,用引号括起来、并且以变量 "t" 为前缀的列是基于 XML 元素值的列。第二行调用 XMLTable 函数指定包含目标数据("i.fax")的 DB2 XML 列和在该列的 XML 文档中的路径,通过该路径可以定位感兴趣的元素(在根元素 "Customer" 的子元素 "Customer" 中)。第 3 到 5 行的 "columns" 子句标识出将被映射到第一行指定的 SQL 结果集中的输出列的特定 XML 元素。这个映射需要指定 XML 元素值将被转换成的数据类型。在这个例子中,所有 XML 数据被转换成传统的 SQL 数据类型。 

    下图展示了运行该查询得到的示例结果。可以看到,输出是一个简单的 SQL 结果集。注意,列名已经被变成大写形式 —— 这在 SQL 中是很常见的。


    SQL/XML 函数可用于定义视图。如果要为 SQL 应用程序的程序员提供本地 XML 数据的关系模型,那么这种功能特别有用。 
    为 XML 列中的数据创建关系视图并不比投影 XML 元素值复杂多少。您只需编写一个 SQL/XML SELECT 语句,在语句中调用 XMLTable 函数,并以此作为视图定义的基础。然后我们在通过创建视图来产生关系数据表:
Create view CustomerView(Name, Age, Fax, Email) as select i.NAME, i.AGE,t.fax,t.email from CUSTOMERS i , xmltable('$c/Customer' passing i.CONTACTINFO as "c" columns fax varchar(100) path 'fax', email varchar(100) path 'email' ) as t where NAME='Smith'
    这样就产生了CustomerView视图


    接下来,我们就可以像操作关系数据表那样来操作CustomerView进行各种查询操作

0
相关文章