XMLQUERY構文を例示する問合わせを以下に示します。
'(1,2,3)'は、3個の整数(1、2、および3)のシーケンスを返すXQuery問合わせです。
SELECT XMLQUERY('(1,2,3)');
問合わせの結果は、次のとおりです。
XMLQUERY('(1,2,3)')
-------------------
1 2 3
以下の問合わせは結果としてItem要素のシーケンスを返します。XQuery問合わせ(パス式 /Customer/Order/Item)が、customerXML列の中のXML文書に対して評価されます。PASSING句により、コンテキスト項目として文書が問合わせに渡されます。パス式 /Customer/Order/Itemが、コンテキスト項目を基準とする相対値として評価されます。
SELECT XMLQUERY('/Customer/Order/Item'
PASSING BY VALUE customer.customerXML
RETURNING CONTENT
NULL ON EMPTY) FROM customer WHERE customerID = 1;
この問合わせの結果の一部を以下に示します。省略記号(...)は、問合わせ結果の一部ではありません。これは、問合わせからさらに結果が返されるが、この例では省略されていることを示しています。
XMLQUERY('/Customer/Order/Item', PASSING BY VALUE customerXML ...
---------------------------------------------------------------------
<Item ID="001"> <Quantity>10</Quantity> <PartNumber>F54709</PartNumber>
<Description>Motorola S10-HD Bluetooth Stereo
Headphones</Description> <UnitPrice>29.50</UnitPrice> <Price...
以下の問合わせは、前のものとよく似ていますが、パラメータが名前渡しであり、問合わせの中でそれが名前($doc)によって参照されている点が異なります。
SELECT XMLQUERY('$doc/Customer/Order/Item'
PASSING customerXML AS "doc") FROM customer WHERE customerID = 1;
以下に示すのは、同じ問合わせで、複数の子Item要素を伴う文書ノードとしてXMLを返すものです。これらの結果については、整形式のXML表現はありません。整形式のXML文書結果が望ましい場合は、問合わせをルート要素の中にラップします。
SELECT XMLQUERY('$i/Customer/Order/Item'
PASSING customerXML AS i
RETURNING CONTENT) FROM customer WHERE customerID = 1;
以下の問合わせは、Item要素のシーケンスをルート要素の中にラップする方法を示しています。
SELECT XMLQUERY('<root>{$i/Customer/Order/Item}</root>'
PASSING customerXML AS i
RETURNING CONTENT) FROM customer WHERE customerID = 1;
この問合わせの結果の一部を以下に示します。
XMLQUERY('<root>{$i/Customer/Order/Item}</root>', PASSING BY ...'
----------------------------------------------------------------
<root><Item ID"001"> <Quantity>10</Quantity> <PartNumber>F54709</PartNumber>
<Description>Motorola S10-HD Bluetooth Stereo Headphones</Description>
<UnitPrice>29.50</UnitPrice>...
以下の問合わせは、特定の項目IDの項目を注文したすべての顧客の名前を返します。この問合わせには複数のパラメータがあります。1つはコンテキスト項目パラメータ(XML 文書)、もう1つは名前付きパラメータ(項目ID)です。
SELECT XMLQUERY('for $i in /Customer/Order/Item
where $i/@ID = $itemId
return $i/../../Name'
PASSING BY VALUE customer.customerXML,
'001' AS itemId
RETURNING SEQUENCE
EMPTY ON EMPTY ) FROM customer WHERE customerID = 1;
この問合わせの結果の一部を以下に示します。
XMLQUERY('for $i in /Customer/Order/Item where $i/@ID = $itemId ...
-------------------------------------------------------------------
<Name>John Hancock</Name>
以下の問合わせには、複数の名前付きパラメータがあります($iと$doc)。
SELECT XMLQUERY('for $i in $doc/Customer/Order/Item
where $i/@ID = $itemId
return $i/../../Name'
PASSING BY VALUE customer.customerXML AS "doc",
'001' AS itemId
RETURNING SEQUENCE
EMPTY ON EMPTY ) FROM customer WHERE customerId=1;
この問合わせの結果の一部を以下に示します。
XMLQUERY('for $i in $doc/Customer/Order/Item where $i/@ID = $itemId ...
-----------------------------------------------------------------------
<Name>John Hancock</Name>