Pour pouvoir stocker un document XML dans une base de données DB2, vous devez activer une colonne pour l'Extension XML. Lorsque vous activez une colonne, vous la préparez en vue de son indexation pour optimiser les recherches. Vous pouvez activer une colonne à l'aide de l'assistant d'administration de l'Extension XML ou du shell de commandes DB2. Le colonne doit être de type XML.
Lorsque DB2 Extension XML active une colonne XML, il exécute les tâches suivantes :
Une fois la colonne XML activée, vous pouvez effectuer les tâches suivantes :
Générez une table XML en créant ou en modifiant une table DB2 dotée d'une colonne de type UDT XML.
Pour activer des colonnes XML :
SALES_TAB
ORDERIl doit s'agir d'une colonne existante de type XML.
c:\dxx\samples\dad\getstart.dad
L'espace table contient les tables annexes générées par l'Extension XML. Les tables annexes sont créées dans l'espace table que vous précisez, ou dans l'espace table par défaut, si vous n'en indiquez aucun.
Si vous l'indiquez, la vue par défaut est automatiquement générée lors de la création de la colonne. Elle effectue la jointure de la table XML et de toutes ses tables annexes.
L'Extension XML utilise la valeur ROOT ID en tant qu'identificateur unique pour associer toutes les tables annexes à la table d'application. Si vous n'indiquez aucun ID racine, l'Extension XML ajoute une colonne DXXROOT_ID dans la table d'application et génère un identificateur par défaut.
Pour activer une colonne XML, entrez la commande suivante :
Syntaxe :
dxxadm enable_column |
---|
>>-dxxadm---enable_column---dbName---tbName---colName-----------> >----DAD_file----+-----------------+---+-------------------+----> '--t--tablespace--' '--v--default_view--' >-----+--------------+----------------------------------------->< '--r--root_id--' |
Paramètres :
Restriction : Si la table d'application comporte une colonne DXXROOT_ID, mais que celle-ci ne contient pas de valeur pour le paramètre root_id, vous devez définir cet identificateur racine sinon une erreur se produit.
Exemple : L'exemple ci-après illustre l'activation d'une colonne à partir du shell de commandes DB2. Le fichier DAD et le document XML se trouvent à l'Annexe B, Exemples.
dxxadm enable_column SALES_DB sales_tab order getstart.dad -v sales_order_view -r invoice_num
Dans cet exemple, la colonne ORDER est activée dans la table SALES_DB.SALES_TAB. Soient un fichier DAD getstart.dad, une vue par défaut sales_order_view et une valeur ROOT ID INVOICE_NUM.
Le schéma de la table SALES_TAB est désormais le suivant :
Nom de colonne | INVOICE_NUM | SALES_PERSON | ORDER |
---|---|---|---|
Type de données | CHAR(6) | VARCHAR(20) | XMLVARCHAR |
Les tables annexes suivantes sont créées en fonction de la définition DAD :
ORDER_SIDE_TAB :
Nom de colonne | ORDER_KEY | CUSTOMER | INVOICE_NUM |
---|---|---|---|
Type de données | INTEGER | VARCHAR(50) | CHAR(6) |
Chemin d'accès | /Order/@key | /Order/Customer/Name | Non applicable |
PART_SIDE_TAB :
Nom de colonne | PART_KEY | PRICE | INVOICE_NUM |
---|---|---|---|
Type de données | INTEGER | DOUBLE | CHAR(6) |
Chemin d'accès | /Order/Part/@key | /Order/Part/ExtendedPrice | Non applicable |
SHIP_SIDE_TAB :
Nom de colonne | DATE | INVOICE_NUM |
---|---|---|
Type de données | DATE | CHAR(6) |
Chemin d'accès | /Order/Part/Shipment/ShipDate | N/A |
Toutes les tables annexes possèdent une colonne INVOICE_NUM de même type car la valeur du paramètre ROOT ID est indiquée par la clé primaire INVOICE_NUM de la table d'application. Une fois la colonne activée, la valeur INVOICE_NUM est insérée dans les tables annexes. La définition du paramètre default_view lors de l'activation de la colonne XML ORDER entraîne la création de la vue par défaut sales_order_view. Cette vue réalise la jointure des tables ci-dessus à l'aide de l'instruction suivante :
CREATE VIEW sales_order_view(invoice_num, sales_person, order, order_key, customer, part_key, price, date) AS SELECT sales_tab.invoice_num, sales_tab.sales_person, sales_tab.order, order_tab.order_key, order_tab.customer, part_tab.part_key, part_tab.price, ship_tab.date FROM sales_tab, order_tab, part_tab, ship_tab WHERE sales_tab.invoice_num = order_tab.invoice_num AND sales_tab.invoice_num = part_tab.invoice_num AND sales_tab.invoice_num = ship_tab.invoice_numSi vous précisez un espace table dans la commande enable_column, les tables annexes sont créés dans celui-ci. Si vous n'indiquez aucun espace table, les tables annexes sont créées dans l'espace table par défaut.