例 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - XMLデータ型

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/amr1556233250442.ditamap
dita:ditavalPath
ja-JP/amr1556233250442.ditaval
dita:id
B035-1140
Product Category
Software
Teradata Vantage

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>