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

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » XML in der Datenbank » XML in der Datenbank benutzen » SQL/XML verwenden, um Abfrageergebnisse als XML zu erhalten

 

Die XMLELEMENT-Funktion verwenden

Die XMLELEMENT-Funktion konstruiert ein XML-Element aus relationalen Daten. Sie können den Inhalt des generierten Elements festlegen und gegebenenfalls auch Attribute und Attributinhalte für dieses Element angeben.

Verschachtelte Elemente generieren

Die folgende Abfrage generiert verschachteltes XML, wobei ein <product_info>-Element für jedes Produkt mit Elementen erzeugt wird, die den Namen, die Menge und die Beschreibung für jedes Produkt liefern:

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;

Diese Abfrage erzeugt das folgende Ergebnis:

ID results
301
<product_info>
 <item_name>Tee Shirt
  </item_name>
 <quantity_left>54
  </quantity_left>
 <description>Medium Orange
  Tee Shirt</description>
</product_info>
302
<product_info>
 <item_name>Tee Shirt
  </item_name>
 <quantity_left>75
  </quantity_left>
 <description>One Size fits
  all Black Tee Shirt
  </description>
</product_info>
400
<product_info>
 <item_name>Baseball Cap
  </item_name>
 <quantity_left>112
  </quantity_left>
 <description>One Size fits
  all Black Baseball Cap
  </description>
</product_info>
... ...
Element-Inhalt angeben

Mit der XMLELEMENT-Funktion können Sie den Inhalt eines Elements festlegen. Die folgende Anweisung erzeugt ein XML-Element mit dem Inhalt hat.

SELECT ID, XMLELEMENT( NAME product_type, 'hat' )
FROM Products
WHERE Name IN ( 'Baseball Cap', 'Visor' );
Elemente mit Attributen generieren

Sie können den Elementen Attribute hinzufügen, indem Sie das XMLATTRIBUTES-Argument in Ihrer Abfrage verwenden. Dieses Argument legt den Attributnamen und Inhalt fest. Die folgende Anweisung erzeugt ein Attribut für den Namen, die Farbe und den Preis für jeden Artikel.

SELECT ID, XMLELEMENT( NAME item_description,
                       XMLATTRIBUTES( Name,
                                       Color,
                                       UnitPrice )
                      ) AS item_description_element
FROM Products
WHERE ID > 400;

Attribute können benannt werden, indem die AS-Klausel angegeben wird:

SELECT ID, XMLELEMENT( NAME item_description,
                       XMLATTRIBUTES ( UnitPrice AS
                                        price ),
                       Products.name
                     ) AS products
FROM Products
WHERE ID > 400;

Weitere Hinweise finden Sie unter XMLELEMENT-Funktion [Zeichenfolge].

Beispiel

Das folgende Beispiel verwendet XMLELEMENT mit einem HTTP-Webservice.

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