指定された列から返された値にタグを付ける関数です。
Synopsis
XMLELEMENT(tag,expression[,expression])

XMLELEMENT(tag,XMLATTRIBUTES(expression [AS alias]),expression[,expression])
引数
NAME tag XML (または HTML) のタグ名。NAME キーワードはオプションです。この引数には、NAME "tag""tag"、および NAME という 3 つの構文形式があります。最初の 2 つは機能的に同じです。指定する場合は、tag を二重引用符で囲む必要があります。tag の大文字/小文字の区別は保持されます。tag には、数字でない文字を少なくとも 1 つ含める必要があります (0–9、小数点、先頭の + または – 記号) 。その他の検証は、tag には実行されません。NAME キーワードを tag の値なしで指定すると、既定のタグの値、<Name> ... </Name> となります。
expression 任意の有効な式。普通は、タグ付けの対象となるデータ値を含む列の名前を指定します。列またはその他の式のコンマ区切りリストを指定できます。これらすべては同じ tag で囲まれます。最初のコンマ区切り要素を、XMLATTRIBUTES 関数にすることができます。XMLATTRIBUTES 要素は、1 つのみ指定できます。
概要
XMLELEMENT 関数は、tag で指定された XML (または HTML) タグを付けた expression の値を返します。XMLELEMENT は、テーブルまたはビューを参照する SELECT クエリまたは SELECT サブクエリで使用できます。XMLELEMENT は、一般のフィールド値とともに SELECT リストで使用できます。
一般的に expression は、クエリで返される複数行の中のフィールド名 (または、フィールド名を 1 つ以上含む式) です。
指定された expression の値は、次の形式のように、開始タグと終了タグで囲んで返します。
<tag>value</tag>
タグを付ける値が空文字列 ('') または NULL の場合、次のように返します。
<tag></tag>
expression に複数のコンマ区切り要素が含まれる場合、次の形式のように、結果が連結されます。
<tag>value1value2</tag>
XMLELEMENT 関数は入れ子にして使用できます。XMLELEMENTXMLFOREST 関数は任意に組み合わせて入れ子にして使用できます。XMLELEMENT 関数は、XMLCONCAT を使用して連結できます。
XMLATTRIBUTES 関数
XMLATTRIBUTES 関数は、XMLELEMENT 関数内でのみ使用できます。expression の要素が XMLATTRIBUTES 関数の場合、次の形式で示すように、指定された式はタグの属性になります。
<tag ID='63' >value</tag>
XMLATTRIBUTES 関数は、XMLELEMENT 関数内で 1 つのみ指定できます。これは expression で任意の要素にできますが、慣例では最初の expression の要素とします。属性値は一重引用符で囲まれ、属性値とタグの閉じ山括弧 (>) との間に空白が挿入されます。
XMLELEMENT と XMLFOREST の比較
句読点文字値
データ値に、XML/HTML でタグまたはその他のコーディングとして解釈される句読点文字が含まれる場合、XMLFORESTXMLELEMENT はこの文字を対応するエンコード形式に変換します。
アンド記号 (&) は &amp; となります。
アポストロフィ (') は &apos; となります。
引用符 (") は &quot; となります。
左山括弧 (<) は &lt; となります。
右山括弧 (>) は &gt; となります。
入力文字列でアポストロフィを表すには、'can''t' のように、2 つのアポストロフィを指定します。列のデータには、アポストロフィを 2 つ付ける必要はありません。
次の例は、通常のデータおよび XML タグが付けられたデータとして、Sample.Person の各個人の Name フィールドの値を返します。
SELECT Name,
       XMLELEMENT("Para",Name) AS ExportName
     FROM Sample.Person
返されるデータ行は、次のようになります。
Name                    ExportName
Emerson,Molly N.   <Para>Emerson,Molly N.</Para>
次の例は、Sample.Person の個別の Home_City と Home_State のペアの値ごとに XML のタグ <Address> ... </Address> を付けて返します。
SELECT DISTINCT 
   XMLELEMENT(NAME "Address",Home_City,' ',Home_State) AS CityState
   FROM Sample.Person
   ORDER BY Home_City
上の例では、オプションの NAME キーワードが使用されています。以下の例は、NAME キーワードを tag 値なしで使用します。
SELECT DISTINCT 
   XMLELEMENT(NAME,Home_City,' ',Home_State) AS CityState
   FROM Sample.Person
   ORDER BY Home_City
この場合、同じデータを返しますが、既定のタグ <Name> ... </Name> が付けられます。
以下の例は、入れ子の XMLELEMENT 関数を使用します。
SELECT Name,XMLELEMENT("Para",Home_State,
                 XMLELEMENT("Emphasis",Name),Age)
FROM Sample.Person
返されるデータ行は、次のようになります。
<Para>CA<Emphasis>Emerson,Molly N.</Emphasis>24</Para>
以下のクエリは、Sample.Person の Name フィールドの値を返します。これはデータに XML のタグ付けをし、このタグ内で ID フィールドをタグ属性として使用したものです。
SELECT XMLELEMENT("Para",XMLATTRIBUTES(ID),Name)AS ExportName
     FROM Sample.Person
返されるデータ行は、次のようになります。
ExportName
<Para ID='101' >Emerson,Molly N.</Para>
属性のエイリアスの指定方法を、以下の例に示します。
SELECT XMLELEMENT("Para",XMLATTRIBUTES(ID AS ItemKey),Name)AS ExportName
     FROM Sample.Person
返されるデータ行は、次のようになります。
ExportName
<Para ItemKey='101' >Emerson,Molly N.</Para>
関連項目
XMLAGG 関数
XMLCONCAT 関数
XMLFOREST 関数
SELECT