XMLFOREST (SQL)
構文
XMLFOREST(expression [AS tag], ...)
概要
XMLFOREST 関数は、各 expression の値に、tag で指定された独自の XML マークアップ開始タグと終了タグを付けて返します。例えば、XMLFOREST(Home_City AS City,Home_State AS State) は、<City>Chicago</City><State>IL</State> のような値を返します。XMLFOREST を使用して空要素タグを生成することはできません。
XMLFOREST は、テーブルまたはビューを参照する SELECT クエリまたは SELECT サブクエリで使用できます。XMLFOREST は、一般の列の値と共に SELECT リストで使用できます。
指定された expression の値は、次の形式のように、開始タグと終了タグで囲んで返します。
<tag>value</tag>
一般的に expression は、列名、または 1 つ以上の列名を含む式です。expression は、データ・ストリーム・フィールドを含む任意のタイプのフィールドにすることができます。XMLFOREST は、それぞれの expression を次のようにタグ付けします。
-
AS tag が指定された場合、XMLFOREST は指定されたタグを結果の値に付けます。tag の値は大文字と小文字を区別します。
-
AS tag が省略され、expression が列名の場合、XMLFOREST は列名を結果の値にタグ付けします。列名の既定のタグは、常に大文字です。
-
expression が列名でない場合 (集約関数、リテラル、2 つの列の連結など)、AS tag 節は必須です。
-
expression がストリーム・フィールドの場合、ストリーム値は生成された XML 値内で以下を使用してエスケープされます。 ...:
<tag>value</tag>
XMLFOREST は、コンマ区切りリストの各アイテムに個別のタグを割り当てます。XMLELEMENT は、単一のタグ内にコンマ区切りリストのすべてのアイテムを連結します。
XMLFOREST 関数は入れ子にして使用できます。入れ子にした XMLFOREST 関数および XMLELEMENT 関数は任意の組み合わせが可能です。XMLFOREST 関数は、XMLCONCAT を使用して連結できます。
NULL 値
XMLFOREST 関数は、実際のデータの値がある場合のみタグを返します。expression の値が NULL の場合、タグを返しません。例を以下に示します。
INSERT INTO Sample.Xmltest (f1,f2,f3) values (NULL,'Row 1',NULL)
SELECT XMLFOREST(f1,f2,f3) from Sample.Xmltest
これは <F2>Row 1</F2> を返します。
空文字列 ('') は、文字列データ型フィールドのデータ値と見なされます。タグ付けする f3 値が空文字列 ('') の場合、XMLFOREST は以下を返します。
<F3></F3>
XMLFOREST は、NULL の処理方法において、XMLELEMENT と異なります。XMLELEMENT は、フィールドの値が NULL の場合でも、常にタグの値を返します。このため、XMLELEMENT では NULL と空文字列は区別されません。どちらも、<tag></tag> と表示されます。
句読点文字値
データ値に、XML/HTML でタグまたはその他のコーディングとして解釈される句読点文字が含まれる場合、XMLFOREST と XMLELEMENT はこの文字を対応するエンコード形式に変換します。
アンド記号 (&) は & となります。
アポストロフィ (') は ' となります。
引用符 (") は " となります。
左山括弧 (<) は < となります。
右山括弧 (>) は > となります。
入力文字列でアポストロフィを表すには、can"t のように、2 つのアポストロフィを指定します。列のデータには、アポストロフィを 2 つ付ける必要はありません。
引数
expression
任意の有効な式。普通は、タグ付けの対象となるデータ値を含む列の名前を指定します。コンマ区切りリストとして指定すると、リスト内の式それぞれが専用の XML マークアップ・タグで囲まれます。
AS tag
XML マークアップ・タグの名前を指定する引数 (オプション)。tag を指定する場合、AS キーワードは必須です。tag の大文字/小文字の区別は保持されます。
tag を二重引用符で囲むかどうかはオプションです。二重引用符を省略した場合、tag は XML の名前付け標準に従います。二重引用符で tag を囲むと、これらの名前付けの制限が取り除かれます。
XMLFOREST は、有効な tag 名に XML の名前付け標準を適用します。名前に文字 !"#$%&'()*+,/;<=>?@[\]^`{|}~ やスペース文字を含めることはできません。また、名前の最初の文字に "-"、"."、または数字を使用することもできません。
AS tag 節を付けずに expression を指定すると、タグの値は expression 列の名前 (大文字表記) になります。例えば、<HOME_CITY>Chicago</HOME_CITY> のようになります。
例
次のクエリは、通常のデータおよび XML タグが付けられたデータとして、Sample.Person の Name 列の値を返します。
SELECT Name,XMLFOREST(Name) AS ExportName
FROM Sample.Person
返されるデータ行は、次のようになります。ここで、既定のタグは列名になります。
Name ExportName Emerson,Molly N. <NAME>Emerson,Molly N.</NAME>
以下の例は複数の列を指定します。
SELECT XMLFOREST(Home_City,
Home_State AS Home_State,
AVG(Age) AS AvAge) AS ExportData
FROM Sample.Person
Home_City フィールドはタグを指定しません。タグはすべて大文字で列名から生成されます : <HOME_CITY>。Home_State フィールドの AS 節はオプションです。タグ名を指定するとタグの書体を制御できるため、ここで指定されています : <HOME_STATE> ではなく <Home_State>。AVG(Age) の AS 節は必須です。これは、値が合計であり列の値ではないので、列名がないためです。返されるデータ行は、次のようになります。
ExportData <HOME_CITY>Chicago</HOME_CITY><Home_State>IL</Home_State> <AvAge>48.0198019801980198</AvAge>
以下の例は、文字ストリーム・データを返します。
SELECT XMLFOREST(name AS Para,Notes AS Para) AS XMLJobHistory
FROM Sample.Employee
返されるデータ行は、次のようになります。
XMLJobHistory <Para>Emerson,Molly N.</Para><Para>Molly worked at DynaMatix Holdings Inc. as a Marketing Manager</Para>
以下の例は、サブクエリの値を使用する XMLFOREST 関数を示しています。
SELECT XMLFOREST(Name,DOB,Age,
(SELECT XMLFOREST(Name,DOB) FROM Sample.Person WHERE %ID=2) AS ExportName)
FROM Sample.Person where %ID=1
返されるデータ行は、次のようになります。
<NAME>Zahn,Rob F.</NAME><DOB>38405</DOB><AGE>71</AGE><ExportName><NAME>Quinn,Mark N.</NAME><DOB>30999</DOB></ExportName>
関連項目
XMLAGG 関数
XMLELEMENT 関数
XMLCONCAT 関数
SELECT 文