IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Insertion de masse de fichier xml vers Oracle


Sujet :

Scripts/Batch

  1. #1
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 126
    Points : 73
    Points
    73
    Par défaut Insertion de masse de fichier xml vers Oracle
    Bonjour,

    j'ai été confronté au problème de devoir charger des fichiers xml dans des tables Oracle. Le thread de largiss m'a mis sur la piste qui consiste à :
    1) mettre en place un fichier xml
    2) définir un xslt relatif à ce fichier

    En ouvrant avec le navigateur, j'ai des INSERT INTO successifs, ce qui m'arrange. Je copie-colle sous TOAD et -youpi- ca marche !

    Maintenant il faut que j'exécute ce mécanisme sur plus de 50000 fichiers. La solution la plus simple est selon moi de passer par un script batch.


    Principe :
    Pour 1 à N fichiers
    - ouvrir le fichier xml dans le navigateur (1)
    - copier le contenu dans le presse papier (2)
    - coller le contenu dans un fichier sql (3)
    - exécuter la commande sqlplus sur le fichier sql
    recommencer la boucle jusqu'à N fichiers

    Mon idée par du principe que c'est le navigateur, et lui seul qui peut faire le lien entre le xslt et le xml pour ressortir les bonnes requêtes. (est-ce correct ?)

    Questions:
    1) Qu'en pensez vous de la solution ? est-ce la plus judicieuse ?
    2) Les étapes (1), (2) et (3) sont-elles réalisables ? Surtout sans que le navigateur n'apparaisse à l'écran ?

    Merci

  2. #2
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    A mon avis le plus simple c'est de te faire une petite application java (ou autre langage ayant des librairies pour traiter facilement du xml) qui prend en entrée un fichier xml et qui te le formatte en csv.

    A partir de la, tu fait ton batch qui appele le programme java puis SQL*Loader pour chacun de tes fichiers.

    Tu as juste à faire le fichier de controle qui correspond à ton formattage csv et roulez jeunesse. Apres selon tes fichiers (si ils n'ont pas la même tete par exemple), il te faudra peut etre generer aussi ce fichier de controle en meme temps que le csv.

    L'avantage de SQL*Loader est que çà sera beaucoup plus rapide pour tes insertions.

    Tu peux coupler ta solution avec la tienne en transformant avec ton xslt ton xml en csv au lieu d'instructions insert.
    Par contre je ne suis pas convaincu que tu puisses en batch faire tes étapes 1 à 3. Je me suis même presque sur que non. En VBScript à la limite.
    Mais tu dois pouvoir trouver des convertisseurs xsl utilisables en ligne de commande sans problème je pense.

    Ce qui donnerait :
    - Appel du convertisseur avec ton fichier xml et le xslt
    - Appel de SQL*Loader
    - Fichier suivant

  3. #3
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Oui, ca serait bien plus simple en java
    Mais dans ma boîte le minimum est installé sur les pc (pas de plateforme de dev java), et les procédures sont très lourdes

    Tu peux coupler ta solution avec la tienne en transformant avec ton xslt ton xml en csv au lieu d'instructions insert.
    Je suis tomber sur msxsl, qui permettrait en ligne de commande d'avoir des fichiers en sortie. Je suis entrain de pencher sur cette commande, mais si certains ont une idée, je suis preneur !

    Merci

  4. #4
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Bon j'ai pu faire ce que je voulais.
    Pour infos :
    j'ai téléchargé msxsl.exe que l'on trouve ici
    Je l'ai dezippé dans C:\WINNT\system32
    puis en ligne de commande/batch, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msxsl  source.xml transformation.xsl -o fichiercible
    fichiercible est le nom du fichier en sortie avec l'extension (je n'ai testé que les extensions .html et .txt, qui sont opérationnels).

    Avec un point bat, je boucle cette commande sur autant de fichier que j'ai et je lance un sqlplus pour inserer les données dans la base.

    Je peux même tout simplement mettre toutes les données, de tous les fichiers séparés dans un seul csv que je charge manuellement via TOAD.
    A voir ...

    Voilaa

    PS: Source : http://www.christopher.compagnon.name/sitewww/xslt.html

  5. #5
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    Je te conseille tout de même vivement l'utilisation de SQL*Loader.
    Ca sera beaucoup plus rapide pour insérer que Toad ou Sql+.

    Apres ça dépend de la fréquence et la criticité de l'utilisation de ton script, mais tu n'as vraiment pas grand chose à modifier pour passer sur cette solution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SGBDR] oracle: d'un fichier XML vers des tables relationnelles
    Par medos86 dans le forum XQUERY/SGBD
    Réponses: 4
    Dernier message: 24/03/2011, 16h05
  2. [XSLT] Insertion du nom du fichier XML par transformation XSL
    Par stepd dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/07/2006, 11h40
  3. Réponses: 1
    Dernier message: 28/04/2006, 16h17
  4. Importation d'un fichier xml vers une BD mysql avec php
    Par naima2005 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 28/04/2006, 15h23
  5. newbie : fichier xml vers html via command-line
    Par morti dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 08/11/2005, 07h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo