XMLEXISTS:
SELECT name FROM clients WHERE xmlexists( '$c/Client/Address[zip="95116"]' passing clients.contact as "c" )
说明:
在WHERE子句中调用XMLEXISTS函数,参数指定了XML路径表达式,DB2据此导航到XML文档邮编元素并且查找值 95116。 “$c/Client/Address”指定了DB2在XML文档中定位邮编元素的路径。美元符号($)用来指定变量。passing clients.contact as "c"对变量c进行定义。这里,“clients”是表名,“contact”是 XML列的列名。换言之,XML文档传递给了变量c。 DB2检索“contact”列中的XML数据,从根节“client”向下,通过节点“Address”到节点“zip”,经过目标邮编匹配检查判断该客户是否居住在目标地区。
在DB2 9.5中进行了简化:
SELECT name FROM clients WHERE xmlexists( '$CONTACT/Client/Address[zip="95116"]' )
XMLQuery:
SELECT xmlquery('$c/Client/email' passing contact as "c") FROM clients WHERE status = 'Gold'
使用XQuery FLWOR表达式中的for:
SELECT name, xmlquery( ‘for $e in $c/Client/email[1] return $e’ passing contact as “c” ) FROM clients WHERE status = ‘Gold’
SELECT xmlquery('for $e in $c/Client/email[1]/text() return
{$e}
' passing contact as "c") FROM clients WHERE status = 'Gold'
XQuery的FLWOR表达式 FLWOR是几个词首字母的缩写:
实例:
CREATE TABLE dept(deptID CHAR(8),deptdoc XML);
将如下XML文档插入到deptdoc列:
然后可以像如下使用FLWOR表达式:
xquery for $d in db2-fn:xmlcolumn('dept.deptdoc')/dept let $emp := $d//employee/name where $d/@bldg > 95 order by $d/@bldg return
结果:
XMLTABLE:
SELECT t.comment#, i.itemname, t.customerID, Message FROM items i, xmltable('$c/Comments/Comment' passing i.comments as "c" columns Comment# integer path 'CommentID', CustomerID integer path 'CustomerID', Message varchar(100) path 'Message') AS t
说明:
第1行指定了包含在结果集中的列。以变量 t作为前缀表明该列的值是XML文档的元素值。 第2行调用 XMLTABLE函数,参数指定了包含目标数据的DB2 XML列,以及目标数据在XML文档中的路径。 第4行至第6行的“columns”语句将XML元素映射到结果集中相应各列。映射还指定了XML元素值将要转换成的数据类型。示例中,所有XML数据都被转换成传统SQL数据类型。
XMLELEMENT:
这个例子使用XMLELEMENT函数创建一系列XML item元素,每一项都包含ID、brand name
和 stock keeping unit(SKU)三个子元素,它们的值由“items”表相应列获取。基本上,当把关系数据转
化成XML数据时都可以使用XMLELEMENT函数。
df
SELECT xmlelement (name "item", itemname), xmlelement (name "id", id), xmlelement (name "brand", brandname), xmlelement (name "sku", sku) FROM items WHERE srp < 100
结果: