Mappage de colonne de base de données XML vers Oracle

Je travaille sur les messages xml que nous recevons. Je dois lire le xml et stocker dans 4 tables différentes.

Quelle est la meilleure façon de gérer cela. Disons si le schéma xml est changé, alors une nouvelle colonne peut être ajoutée ou une colonne peut être supprimée ou renommée etc ...

Comment pouvons-nous faire ce couplage lâche. Toute modification de xml ou de base de données ne nécessite pas de changement de code?

Merci,

0
@tbone. Nous lisons xml à partir de Tibco EMS. Ensuite, stockez d'abord le message xml dans un champ de clob. Plus tard nous récupérons le xml et l'analysons et devons extraire des valeurs de xml et stocker dans 4 tables différentes.
ajouté l'auteur Naveen Chakravarthy, source
Nous prévoyons d'effectuer un mappage XPath avec le nom de la colonne de base de données et le nom de la table. Mais en C#, comment pouvons-nous atteindre l'extensibilité où les changements futurs au xml ou à la base de données ne nécessitent pas de changement de code. Et à l'avenir, nous aurons peut-être besoin d'analyser différents XML, c'est-à-dire d'autres fournisseurs XML. Nous pourrions obtenir xml de schémas différents de plus d'un fournisseur.
ajouté l'auteur Naveen Chakravarthy, source
Comment utilisez-vous le xml après son stockage dans la base de données? Simplement à des fins d'audit? Est-ce que vous vraiment analyser le xml et stocker en relation?
ajouté l'auteur tbone, source

2 Réponses

Vous ne savez pas comment vous envisagez d'utiliser le xml une fois stocké dans Oracle, mais si vous le stockez simplement à des fins d'audit, vous pouvez stocker du code xml dans un champ CLOB avec un numéro de version et des dates. Dans une table de référence distincte, associez le numéro de version de xml avec sa date dtd (et les dates créées/modifiées).

0
ajouté
Nous lisons xml à partir de Tibco EMS. Ensuite, stockez d'abord le message xml dans un champ de clob. Plus tard nous récupérons le xml et l'analysons et devons extraire des valeurs de xml et stocker dans 4 tables différentes.
ajouté l'auteur Naveen Chakravarthy, source

Si vous utilisez Oracle 11G, vous pouvez créer des variables XMLTYPE dans une procédure PL/SQL et vous pouvez ensuite utiliser la fonction extract() pour récupérer uniquement les parties du document xml que vous souhaitez être des champs.

Après avoir déclaré une variable PL/SQL de type XMLTYPE, utilisez la fonction XMLTYPE.CREATEXML() pour créer une variable XMLTYPE.

V_INPUT_XML  := XMLTYPE.CREATEXML(V_TAB.INPUT_MESSAGE);

La fonction PL/SQL extract() renvoie un XMLTYPE et j'ai getclobval() utilisé pour convertir un XMLTYPE en un VARCHAR.

--V_OUTPUT_XML is set by a result of the extract() function 
--on an XMLTYPE
V_OUTPUT_STR := v_output_xml.getclobval();

Au moins avec cela, il suffit de changer votre PL/SQL si le chemin vers les champs que vous définissez les changements; changements à la Document xml en dehors des champs (tant qu'ils ne le sont pas affecter le XPATH aux champs) ne devrait pas nécessiter de changements PL/SQL ..

0
ajouté
@A B actuellement notre base de données est 10g. Planification pour 11g mais je ne sais pas quand cela se produira. Nous prévoyons de faire l'analyse syntaxique en C# (LINQ to XML) à la place des fonctionnalités xml d'Oracle.
ajouté l'auteur Naveen Chakravarthy, source