XMLTABLE関数を使用すると、1つ以上のXML文書を行と列の形に変換することができます。これは、ノードのシーケンスを生成するための行問合わせ式を入力とします。各ノード シーケンスの結果がそれぞれ1行となります。一連の列問合わせ式により、列値のそれぞれがノードからどのように計算されるかが決定されます。
この例では、入力XML文書からitem要素をすべて検索し、検出された要素ごとに1行が生成されます。その列値は、その要素の下位にある要素および属性(ItemID やQuantity など)に基づいて生成されます。
SELECT X.*
FROM (SELECT * FROM customer WHERE customerID = 1) AS C,
XMLTable (
'/Customer/Order/Item'
PASSING C.customerXML
COLUMNS
"Seqno" FOR ORDINALITY,
"CustomerName" VARCHAR(64) PATH '../../Name',
"OrderNumber" VARCHAR(32) PATH '../@Number',
"OrderDate" DATE PATH '../@Date',
"ItemID" VARCHAR(12) PATH '@ID',
"Quantity" INTEGER PATH 'Quantity',
"UnitPrice" DECIMAL(9,2),
"TotalPrice" DECIMAL(9,2) PATH 'Price'
) AS X ("Sequence #", "Customer Name", "Order #", "Order Date", "Item ID", "Qty", "Unit Price", "Total Price");
問合わせの結果は、次のとおりです。
Sequence# Customer Name Order# Order Date Item ID Qty Unit Price Total Price ---------------------------------------------------------------------------------------- 1 John Hancock NW-01-16366 12/02/28 001 10 29.50 295.00 2 John Hancock NW-01-16366 12/02/28 101 1 139.99 139.99