技术开发 频道

使用Pure XML技术查询DB2 Express-C数据库



    三、普通的SQL查询

    对于XML数据来说,xml类型和CLOB类型字段可以达到同样的目的,就是将整个XML数据取出,不做任何处理送到客户端,只要客户端程序可以识别XML数据,就可以处理它们。我们可以使用如下的SQL来返回xml类型的数据:

    select xml_data from table1 where id = '0001'

    还可以将table1和table2做一下等值连接,以便返回更多的数据。

select table1.id, table2.name, table1.xml_data from table1,table2 where table1.id = table2.id and table2.name = 'Mike'
    从上面的两条SQL语句中可以看出,使用普通的SQL无法对XML数据更进一步地处理,而必须要客户端来过滤这些XML数据。如果只是返回整个XML文档,建议使用传统的VARCHAR或CLOB类型字段,因此,这种字段并不会对XML进行任何处理,如果只是简单地返回数据,在性能上可能会表现得更优越。
普通的SQL在不使用XQuery的情况下,也可以利用传统的DB2 Net Search扩展来进行全文检索。但这种方式要比XQuery方式的效率低。如下面的SQL返回table1中xml_data字段的field1节点包含字符串xyz的所有的XML文档数据。

select xml_data from table1 where CONTAINS(xml_data,'SECTION("/table1/row/field1") "xyz" ')=1;
    四、在SQL中嵌入XQuery/XPath

    在DB V8中,DB2已经加入了一些处理XML数据的功能,如用户可以使用XMLELEMENT、XMLATTRIBUTE、XMLFOREST、XMLAGG 和其他一些函数将关系型数据构造为XML。
在DB2 Express-C中,IBM又为其加入了很多可以使用XQuery或更简单的XPath表达式的功能,如XMLQUERY、XMLTABLE、XMLEXISTS等函数。如下面的SQL语句查询xml_data字段中所有table1节点的id属性值为为"xxx"并且id不小于"0010"的记录,并返回xml_data字段中field1节点的值。

SELECT id, XMLQUERY('for $e in $xd/table1/row return $e/field1/text()' passing d.xml_data as "xd") FROM table1 t1 WHERE id >= '0010' and XMLEXISTS('$xd/table1[@id = "xxx"]' passing t1.xml_data as "xd");
    上面的SQL语句的查询结果如下:
0010 xyz 0011 kkk … …
0
相关文章