XMLELEMENT 関数は、リレーショナル・データから XML 要素を構成します。生成される要素の内容を指定できます。また、その要素の属性と、属性の内容も指定できます。
次のクエリは、ネストされた XML を生成します。製品ごとに <product_info> 要素が生成され、その中に各製品の名前、数量、説明を示す要素が生成されます。
SELECT ID, XMLELEMENT( NAME product_info, XMLELEMENT( NAME item_name, Products.name ), XMLELEMENT( NAME quantity_left, Products.Quantity ), XMLELEMENT( NAME description, Products.Size || ' ' || Products.Color || ' ' || Products.name ) ) AS results FROM Products WHERE Quantity > 30; |
このクエリは、次の結果を生成します。
ID | results | ||
---|---|---|---|
301 |
|
||
302 |
|
||
400 |
|
||
... | ... |
XMLELEMENT 関数を使用して、要素の内容を指定できます。次の文は、内容 hat を持つ XML 要素を生成します。
SELECT ID, XMLELEMENT( NAME product_type, 'hat' ) FROM Products WHERE Name IN ( 'Baseball Cap', 'Visor' ); |
クエリに XMLATTRIBUTES 引数を含めると、要素に属性を追加できます。この引数は、属性名と内容を指定します。次の文は、各品目の name、Color、UnitPrice に対して属性を生成します。
SELECT ID, XMLELEMENT( NAME item_description, XMLATTRIBUTES( Name, Color, UnitPrice ) ) AS item_description_element FROM Products WHERE ID > 400; |
AS 句を指定して、属性に名前を付けることができます。
SELECT ID, XMLELEMENT( NAME item_description, XMLATTRIBUTES ( UnitPrice AS price ), Products.name ) AS products FROM Products WHERE ID > 400; |
詳細については、XMLELEMENT 関数 [文字列] を参照してください。
次の例では HTTP Web サービスで XMLELEMENT を使用します。
ALTER PROCEDURE "DBA"."http_header_example_with_table_proc"() RESULT ( res LONG VARCHAR ) BEGIN DECLARE var LONG VARCHAR; DECLARE varval LONG VARCHAR; DECLARE I INT; DECLARE res LONG VARCHAR; DECLARE tabl XML; SET var = NULL; loop_h: LOOP SET var = NEXT_HTTP_HEADER( var ); IF var IS NULL THEN LEAVE leave loop_h END IF; SET varval = http_header( var ); -- ... do some action for <var,varval> pair... SET tabl = tabl || XMLELEMENT( name "tr", XMLATTRIBUTES( 'left' AS "align", 'top' AS "valign" ), XMLELEMENT( name "td", var ), XMLELEMENT( name "td", varval ) ) ; END LOOP; SET res = XMLELEMENT( NAME "table", XMLATTRIBUTES( '' AS "BORDER", '10' as "CELLPADDING", '0' AS "CELLSPACING" ), XMLELEMENT( NAME "th", XMLATTRIBUTES( 'left' AS "align", 'top' AS "valign" ), 'Header Name' ), XMLELEMENT( NAME "th", XMLATTRIBUTES( 'left' AS "align", 'top' AS "valign" ), 'Header Value' ), tabl ) ; SELECT res; END |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |