L'Extension XML offre une méthode d'accès et de stockage, appelée colonne XML, applicable à des documents XML entiers. Cette méthode permet de stocker un document en lui affectant des types de fichiers XML, d'indexer la colonne dans des tables annexes, puis de lancer des recherches dans ce document XML. Elle est particulièrement utile pour les applications d'archivage dans lesquelles les documents ne sont pas souvent mis à jour. Dans ce tutoriel, vous allez stocker dans la colonne XML le document XML fourni.
Dans ce cours, vous allez stocker le document dans la table SALES_TAB. Pour ce faire, vous allez exécuter les tâches suivantes :
Vous pouvez valider les données XML dans une colonne XML à l'aide d'une DTD. L'Extension XML crée une table, DTD_REF, dans la base de données activée pour XML. Cette table, désignée table de référence des DTD, est mise à votre disposition pour le stockage des DTD. Lorsque vous validez des documents XML, vous devez stocker la DTD dans ce référentiel. Dans ce tutoriel, la DTD s'appelle c:\dxx\samples\dtd\getstart.dtd.
Pour insérer la DTD, procédez comme suit :
A partir de la fenêtre de commande DB2, entrez la commande SQL INSERT suivante sur une même ligne :
DB2 CONNECT TO SALES_DB DB2 INSERT into db2xml.dtd_ref values('c:\dxx\samples\dtd\getstart.dtd', db2xml.XMLClobFromFile('c:\dxx\samples\dtd\getstart.dtd'), 0, 'user1', 'user1', 'user1')
Vous pouvez également insérer la DTD en exécutant le fichier de commandes suivant :
getstart_insertDTD.cmd
Le fichier DAD pour la colonne XML a une structure simple. Vous indiquez le mode de stockage colonne XML et vous définissez les tables et les colonnes pour l'indexation.
Dans la procédure suivante, les éléments de la DAD sont appelés balises et ceux de la structure du document XML, éléments. Vous trouverez un fichier DAD exemple, identique à celui que vous allez créer, dans c:\dxx\samples\dad\getstart_xcolumn.dad. Cet exemple comporte quelques légères différences par rapport au fichier qui sera généré au cours des étapes suivantes. Si vous l'utilisez pour le cours, notez que les chemins d'accès aux fichiers peuvent différer de ceux de votre environnement et que la valeur OUI de l'élément <validation> est remplacée par NON.
Pour préparer le fichier DAD, procédez comme suit :
Notez que la distinction entre les majuscules et les minuscules est prise en compte dans toutes les balises employées dans le fichier DAD.
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd">Le fichier DAD est un document XML pour lequel des déclarations XML sont nécessaires.
<dtdid>c:\dxx\samples\dtd\getstart.dtd</dtdid>
Vérifiez que cette chaîne correspond à la valeur utilisée comme première valeur de paramètre lors de l'insertion de la DTD dans la table de référence des DTD, à la section Insertion de la DTD dans le référentiel des DTD. Par exemple, le chemin utilisé pour l'ID DTD peut être différent de la chaîne ci-dessus si vous travaillez sur une autre unité machine.
<validation>YES</validation>La valeur de l'élément <validation> doit être en majuscules.
<Xcolumn> </Xcolumn>
<Xcolumn> <table name="order_side_tab"> </table> <table name="part_side_tab"> </table> <table name="ship_side_tab"> </table> </Xcolumn>
<Xcolumn> <table name="order_side_tab"> <column name="order_key" type="integer" path="/Order/@key" multi_occurrence="NO"/> <column name="customer" type="varchar(50)" path="/Order/Customer/Name" multi_occurrence="NO"/> </table> <table name="part_side_tab"> <column name="price" type="decimal(10,2)" path="/Order/Part/ExtendedPrice" multi_occurrence="YES"/> </table> <table name="ship_side_tab"> <column name="date" type="DATE" path="/Order/Part/Shipment/ShipDate" multi_occurrence="YES"/> </table> </Xcolumn>
Vous pouvez comparer le fichier que vous venez de créer avec le fichier exemple, c:\dxx\samples\dad\getstart_xcolumn.dad. Il s'agit d'une copie de travail du fichier DAD nécessaire pour l'activation de la colonne XML et la création des tables annexes. Le fichier exemple contient peut-être des instructions relatives aux chemins d'accès (path) qui doivent être adaptées à votre environnement pour pouvoir s'exécuter.
Dans cette section, vous allez créer la table SALES_TAB. A l'origine, cette table comporte deux colonnes d'informations commerciales relatives à la commande client.
Pour créer la table, procédez comme suit :
A partir de la fenêtre de commande DB2, entrez l'instruction CREATE TABLE suivante :
DB2 CONNECT TO SALES_DB DB2 CREATE TABLE SALES_TAB(INVOICE_NUM CHAR(6) NOT NULL PRIMARY KEY, SALES_PERSON VARCHAR(20))
Vous pouvez également créer la table en exécutant le fichier de commandes suivant :
getstart_createTabCol.cmd
A présent, vous allez ajouter une colonne dans la table SALES_TAB. Cette colonne est destinée à contenir le document XML entier généré précédemment et doit être du type UDT XML. L'Extension XML fournit plusieurs types de données, décrits au Types de données UDT de l'Extension XML. Dans ce cours, vous allez stocker le document en tant que XMLVARCHAR.
Pour ajouter la colonne de type XML, procédez comme suit :
A partir de la fenêtre de commande DB2, entrez l'instruction SQL suivante :
DB2 ALTER TABLE SALES_TAB ADD ORDER DB2XML.XMLVARCHAR
Vous pouvez également modifier la table en exécutant le fichier de commandes suivant :
getstart_alterTabCol.cmd
Une fois la colonne XML créée, vous allez l'activer pour l'Extension XML. Lorsque vous activez la colonne, l'Extension XML lit le fichier DAD et crée les tables annexes. Au préalable, vous devez :
Pour activer la colonne pour XML, procédez comme suit :
A partir de la fenêtre de commande DB2, entrez la commande suivante :
dxxadm enable_column SALES_DB SALES_TAB ORDER GETSTART_XCOLUMN.DAD -v SALES_ORDER_VIEW -r INVOICE_NUM
Vous pouvez également activer la colonne pour XML en exécutant le fichier de commandes suivant :
getstart_enableCol.cmd
L'Extension XML crée les tables annexes avec la colonne INVOICE_NUM et génère une vue par défaut.
Important : Ne modifiez en aucun cas les tables annexes. Vous ne devez mettre à jour le document XML qu'à l'aide des fonctions UDF de l'Extension XML. Dans ce cas, l'Extension XML actualise automatiquement les tables annexes lorsque vous mettez à jour le document XML dans la colonne XML.
Une fois la colonne XML activée, vous avez créé une vue de celle-ci et des tables annexes. Vous pouvez utiliser cette vue en mode colonne XML.
Pour afficher la colonne XML et les colonnes des tables annexes, procédez comme suit :
A partir de la fenêtre de commande DB2, entrez l'instruction SQL SELECT suivante :
DB2 SELECT * FROM SALES_ORDER_VIEW
La vue affiche les colonnes des tables annexes, comme indiqué dans le fichier getstart_xcolumn.dad.
L'indexation des tables annexes permet d'effectuer des recherches
structurelles rapides dans le document XML. A ce stade, vous allez
indexer des colonnes de clé figurant dans les tables annexes générées lors de
l'activation de la colonne XML ORDER. Le service de maintenance a
identifié les colonnes pouvant d'être fréquemment interrogées par le
personnel. Le Tableau 3 décrit ces colonnes que vous allez indexer :
Tableau 3. Colonnes de tables annexes à indexer
Colonne | Table annexe |
---|---|
ORDER_KEY | ORDER_SIDE_TAB |
CUSTOMER | ORDER_SIDE_TAB |
PRICE | PART_SIDE_TAB |
DATE | SHIP_SIDE_TAB |
Pour indexer les tables annexes, procédez comme suit :
A partir de la fenêtre de commande DB2, entrez les commandes SQL suivantes :
DB2 CREATE INDEX KEY_IDX ON ORDER_SIDE_TAB(ORDER_KEY) DB2 CREATE INDEX CUSTOMER_IDX ON ORDER_SIDE_TAB(CUSTOMER) DB2 CREATE INDEX PRICE_IDX ON PART_SIDE_TAB(PRICE) DB2 CREATE INDEX DATE_IDX ON SHIP_SIDE_TAB(DATE)
Vous pouvez également créer les index en exécutant le fichier de commandes suivant :
getstart_createIndex.cmd
Une fois la colonne activée pour pouvoir recevoir le document XML et les tables annexes indexées, vous pouvez stocker le document à l'aide des fonctions de l'Extension XML. Lorsque vous stockez des données dans une colonne XML, vous faites appel aux fonctions de transtypage par défaut ou aux fonctions UDF de l'Extension XML. Etant donné que vous allez stocker un objet de type de base VARCHAR dans une colonne de type UDT XML XMLVARCHAR, vous allez utiliser la fonction de transtypage par défaut. Pour plus d'informations sur les fonctions de transtypage par défaut dédiées au stockage et sur les fonctions UDF fournies par l'Extension XML, reportez-vous à la section Stockage des données.
Pour stocker le document XML, procédez comme suit :
Important : Ouvrez le document XML c:\dxx\samples\xml\getstart.xml. Assurez-vous que le chemin de fichier contenu dans DOCTYPE correspond à l'ID DTD indiqué dans la DAD et lors de l'insertion de la DTD dans le référentiel des DTD. Pour vérifier leur concordance, interrogez la table db2xml.DTD_REF et vérifiez l'élément DTDID du fichier DAD. Si vous utilisez une unité et un répertoire autres que ceux par défaut, vous devrez peut-être modifier le chemin d'accès dans la déclaration DOCTYPE.
A partir de la fenêtre de commande DB2, entrez la commande SQL INSERT suivante :
DB2 INSERT INTO SALES_TAB (INVOICE_NUM, SALES_PERSON, ORDER) VALUES('123456', 'Sriram Srinivasan', db2xml.XMLVarcharFromFile('c:\dxx\samples\cmd\getstart.xml '))
Lorsque vous stockez le document XML, l'Extension XML exécute la mise à jour automatique des tables annexes.
Vous pouvez également stocker le document en exécutant le fichier de commandes suivant :
getstart_insertXML.cmd
Pour vérifier la mise à jour des tables, lancez les instructions SELECT suivantes à partir de la fenêtre de commande DB2 :
DB2 SELECT * FROM SALES_TAB DB2 SELECT * FROM PART_SIDE_TAB DB2 SELECT * FROM ORDER_SIDE_TAB DB2 SELECT * FROM SHIP_SIDE_TAB
Vous pouvez effectuer des recherches dans le document XML en interrogeant directement les tables annexes. Dans cet exemple, vous allez rechercher toutes les commandes clients dont le prix est supérieur à 2500,00.
Pour interroger les tables annexes, procédez comme suit :
A partir de la fenêtre de commande DB2, entrez l'instruction SQL SELECT suivante :
DB2 "SELECT DISTINCT SALES_PERSON FROM SALES_TAB S, PART_SIDE_TAB P WHERE PRICE > 2500.00 AND S.INVOICE_NUM=P.INVOICE_NUM"
L'ensemble de résultats doit présenter les noms des vendeurs qui ont vendu un article dont le prix est supérieur à 2500,00.
Vous pouvez également effectuer des recherches dans le document en exécutant le fichier de commandes suivant :
getstart_queryCol.cmd
Vous avez terminé l'exécution du tutoriel d'initiation au stockage de documents XML dans des tables DB2. De nombreux exemples du manuel sont basées sur ce tutoriel.