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>