Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データベースにおける XML » データベースにおける XML の使用 » SQL/XML を使用してクエリ結果を XML として取得する

 

XMLGEN 関数の使用

XMLGEN 関数は、XQuery コンストラクタに基づいて XML 値を生成するために使用されます。

次のクエリによって生成される XML は、SQL Anywhere サンプル・データベース内の顧客の注文に関する情報を提供します。このクエリでは、次の変数参照を使用します。

  • {$ID}   SalesOrders テーブルの ID カラムの値を使用して、<ID> 要素の内容を生成します。

  • {$OrderDate}   SalesOrders テーブルの OrderDate カラムの値を使用して、<date> 要素の内容を生成します。

  • {$Customers}   Customers テーブルの CompanyName カラムから <customer> 要素の内容を生成します。

SELECT XMLGEN ( '<order>
              <ID>{$ID}</ID>
              <date>{$OrderDate}</date>
              <customer>{$Customers}</customer>
              </order>',
              SalesOrders.ID,
              SalesOrders.OrderDate,
              Customers.CompanyName AS Customers 
              ) AS order_info      
FROM SalesOrders JOIN Customers
ON Customers.ID = SalesOrders.CustomerID
ORDER BY SalesOrders.CustomerID;

このクエリは、次の結果を生成します。

order_info
<order>
 <ID>2001</ID>
 <date>2000-03-16</date>
 <customer>The Power Group</customer>
</order>
<order>
 <ID>2005</ID>
 <date>2001-03-26</date>
 <customer>The Power Group</customer>
</order>
<order>
 <ID>2125</ID>
 <date>2001-06-24</date>
 <customer>The Power Group</customer>
</order>
<order>
 <ID>2206</ID>
 <date>2000-04-16</date>
 <customer>The Power Group</customer>
</order>
...
属性の生成

注文 ID 番号を <order> 要素の属性としたい場合は、次のようにクエリを記述します (変数参照が二重引用符で囲まれている点に注意してください。これは、属性値を指定しているためです)。

SELECT XMLGEN ( '<order ID="{$ID}">
                 <date>{$OrderDate}</date>
                 <customer>{$Customers}</customer>
                 </order>',
                SalesOrders.ID,
                SalesOrders.OrderDate,
                Customers.CompanyName AS Customers
              ) AS order_info 
FROM SalesOrders JOIN Customers
ON Customers.ID = SalesOrders.CustomerID
ORDER BY SalesOrders.OrderDate;

このクエリは、次の結果を生成します。

order_info
<order ID="2131">
 <date>2000-01-02</date>
 <customer>BoSox Club</customer>
</order>
<order ID="2065">
 <date>2000-01-03</date>
 <customer>Bloomfield&apos;s</customer>
</order>
<order ID="2126">
 <date>2000-01-03</date>
 <customer>Leisure Time</customer>
</order>
<order ID="2127">
 <date>2000-01-06</date>
 <customer>Creative Customs Inc.</customer>
</order>
...

両方の結果セットにおいて、顧客名 Bloomfield's は、Bloomfield&apos;s と引用されています。これは、アポストロフィは XML において特別な文字であり、<customer> 要素が生成される元となったカラムは XML 型ではないためです。

XMLGEN での無効な文字の引用の詳細については、無効な名前と SQL/XMLを参照してください。

XML 文書のヘッダ情報の指定

SQL Anywhere がサポートする FOR XML 句と SQL/XML 関数は、生成する XML 文書にバージョン宣言情報を含めません。XMLGEN 関数を使用すると、ヘッダ情報を生成できます。

SELECT XMLGEN( '<?xml version="1.0" 
                encoding="ISO-8859-1" ?>
                <r>{$x}</r>',
                (SELECT GivenName, Surname 
      FROM Customers FOR XML RAW) AS x );

このクエリは、次の結果を生成します。

<?xml version="1.0" encoding="ISO-8859-1" ?>
<r>
 <row GivenName="Michaels" Surname="Devlin"/>
 <row GivenName="Beth" Surname="Reiser"/>
 <row GivenName="Erin" Surname="Niedringhaus"/>
 <row GivenName="Meghan" Surname="Mason"/>
 ...
</r>

XMLGEN 関数の詳細については、XMLGEN 関数 [文字列] を参照してください。