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 函数 [String]。
以下示例将 XMLELEMENT 与 HTTP web 服务搭配使用。
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 |
![]() |
使用DocCommentXchange 讨论此页。
|
版权 © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |