IBM Books

Extension XML Administration et programmation

Extraction d'un document entier

Tâche en cours :

  1. Assurez-vous que vous avez stocké le document XML dans une table XML et déterminez les données à extraire.
  2. Choisissez une méthode pour l'extraction de données et leur importation dans la table DB2 (fonctions de transtypage ou fonctions UDF).
  3. Si vous utilisez la fonction UDF Content() multi-référencée, déterminez le type des données à exporter et à importer.
  4. Indiquez une instruction SQL qui identifie la table et la colonne XML source pour l'extraction du document XML.

L'Extension XML comporte deux méthodes d'extraction des données :

Utilisation d'une fonction de transtypage par défaut
La fonction de transtypage par défaut fournie par DB2 pour les types UDT permet de convertir un type UDT XML en type de base SQL, puis de l'utiliser. Vous pouvez extraire des données par l'ajout dans l'instruction SELECT de fonctions de transtypage fournies par l'Extension XML. Le Tableau 12 répertorie les fonctions de transtypage fournies :


Tableau 12. Fonctions de transtypage par défaut de l'Extension XML
Transtypage utilisé dans la clause SELECT Type de données renvoyé Description
varchar(XMLVARCHAR) VARCHAR Document XML dans VARCHAR
clob(XMLCLOB) CLOB Document XML dans CLOB
varchar(XMLFile) VARCHAR Nom de fichier XML dans VARCHAR
Exemple : Dans l'exemple suivant, les données XMLVARCHAR sont extraites, puis stockées en mémoire en tant que données de type VARCHAR :

EXEC SQL SELECT db2xml.varchar(order) from sales_tab

Utilisation de la fonction UDF Content() multi-référencée
La fonction UDF Content() permet d'extraire le contenu d'un document d'une mémoire externe vers la mémoire interne, ou de l'exporter de la mémoire interne vers un fichier externe figurant sur le serveur DB2.

Par exemple, vous pouvez stocker votre document XML en fichier XMLFILE et l'utiliser dans la mémoire interne. Dans ce cas, vous avez recours à la fonction UDF Content() qui accepte des données d'entrée de type XMLFILE et renvoie un objet CLOB.

La fonction UDF Content() offre deux modes d'extraction, selon le type de données indiqué :

Extraction d'un document de la mémoire externe vers la mémoire interne
La fonction Content() permet d'extraire un document XML stocké en tant que fichier externe et de l'exporter vers une mémoire tampon ou un releveur de coordonnées CLOB. Respectez la syntaxe suivante pour la fonction, xmlobj représentant la colonne XML interrogée :

XMLFILE vers CLOB : Extrait des données d'un fichier et les exporte vers un releveur de coordonnées CLOB.

Content(xmlobj XMLFile)

Extraction d'un document de la mémoire interne vers un fichier externe
La fonction Content() permet également d'extraire un document XML stocké dans DB2 en tant qu'objet XMLCLOB et de l'exporter vers un fichier du système de fichiers résidant sur le serveur de bases de données. Elle renvoie le nom du fichier au format VARCHAR. Respectez la syntaxe suivante pour la fonction, xmlobj représentant la colonne XML interrogée et filename, le fichier externe. XML type peut correspondre au type XMLVARCHAR ou XMLCLOB.

Type XML vers fichier externe : Extrait le contenu XML stocké comme type XML et l'exporte vers un fichier externe.

Content(xmlobj XML type, filename varchar(512))

Où :

xmlobj
Nom de la colonne XML à partir de laquelle le contenu XML est extrait ; xmlobj peut être de type XMLVARCHAR ou XMLCLOB.

filename
Nom du fichier dans lequel les données XML doivent être stockées.

Dans l'exemple ci-dessous, un petit segment de programme C comportant des instructions SQL imbriquées illustre la procédure d'extraction d'un document XML d'un fichier vers la mémoire interne. Cet exemple suppose que la colonne BOOK est de type XMLFILE.

EXEC SQL BEGIN DECLARE SECTION;
              SQL TYPE IS CLOB_LOCATOR xml_buff;
          EXEC SQL END DECLARE SECTION;
          EXEC SQL CONNECT TO SALES_DB
          EXEC SQL DECLARE c1 CURSOR FOR
              SELECT Content(order) from sales_tab 
                        EXEC SQL OPEN c1;
          do {
             EXEC SQL FETCH c1 INTO :xml_buff; 
             if (SQLCODE != 0) {
                break;
                }
             else {
               /* do whatever you need to do with the XML doc in buffer */
               }
             }
          EXEC SQL CLOSE c1;
          EXEC SQL CONNECT RESET;


[ Début de page | Page précédente | Page suivante | Table des matières | Index ]