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

XQUERY/SGBD XML Discussion :

[Oracle] Insertion Xml dans une table [SGBDR]


Sujet :

XQUERY/SGBD XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 50
    Points : 50
    Points
    50
    Par défaut [Oracle] Insertion Xml dans une table
    Bonjour,

    Je dispose d'une table dans Oracle dont une de mes colonnes est de type XMLTYPE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE GED_XML
    (
      ID_GED_XML      NUMBER,
      GED_XML_SPEC  SYS.XMLTYPE
    )
    Mon but est de manipuler le contenu de la colonne GED_XML_SPEC, d'extraire qques éléments pour les réinsérer dans une autre table dont voici la structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE GDD_REGISTRE
    (
      ID_DOSSIER       NUMBER,
      NOM                 VARCHAR2(50 BYTE),
      PRENOM            VARCHAR2(30 BYTE)
    )
    Le fichier XML que je reçois et qui est stocké sur disque et qui ss'appelle Essai_Xml.xml contient plusieurs colonnes dont l'identifiant, le nom et le prénom.

    1) J'écris une procédure, je prends mon fichier, je le transforme et je l'inserre dans la table GED_XML. Cela marche fort bien.

    Ci-après une partie du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            ...
            V_REPERTOIRE_XML := 'FICHIER_XML'; 
            V_FICH_XML       := 'Essai_Xml.xml';
           GIP_PC_CHARGER_FICHIER_LOB (V_XML_DOC, V_FICH_XML,   V_REPERTOIRE_XML);
     
          INSERT INTO GED_XML VALUES (1, XMLTYPE (V_XML_DOC) );
          ....
    2) J'écris une deuxième procédure pour faire une insertion dans ma table Gdd_Registre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
       ...   
       V_XML_DOC    XMLTYPE;
       V_ID_DOSSIER NUMBER;
       V_NOM           VARCHAR2(50);
       V_PRENOM      VARCHAR2(30);  
     
    BEGIN  
     
       SELECT GED_XML_SPEC 
        INTO  V_XML_DOC 
          FROM  GED_XML;
     
             V_ID_DOSSIER := V_XML_DOC.EXTRACT ('//ID_DOSSIER/text()').getnumberval(); 
             V_NOM        := V_XML_DOC.EXTRACT ('//NOM/text()').getstringval();
             V_PRENOM   := V_XML_DOC.EXTRACT ('//PRENOM/text()').getstringval();
     
             INSERT INTO GDD_REGISTRE (ID_DOSSIER, NOM, PRENOM)
               VALUES (V_ID_DOSSIER, V_NOM, V_PRENOM);  
          ...
    Le résultat est que je n'ai qu'une seule ligne dans ma table alors que je dois avoir autant de lignes que d'enregistrements contenus dans mon GED_XML_SPEC

    Exemple :

    Pour ce fichier en entrée et qui est contenu dans GED_XML_SPEC, je m'attends à avoir 5 enregistrements dans ma table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?xml version="1.0"?>
    <ROWSET>
     <ROW>
      <ID_DOSSIER>6152292</ID_DOSSIER>
      <NOM>RAMLIM</NOM>
      <PRENOM>ADÉMAR</PRENOM>
      <TYPE_PERS>PP</TYPE_PERS>
     </ROW>
     <ROW>
      <ID_DOSSIER>6389233</ID_DOSSIER>
      <NOM>ROBOTWLIM FEMUL</NOM>
      <PRENOM>MATHWIN</PRENOM>
      <TYPE_PERS>PP</TYPE_PERS>
     </ROW>
     <ROW>
      <ID_DOSSIER>6497713</ID_DOSSIER>
      <NOM>WOLIPUT</NOM>
      <PRENOM>FRANCOIS-X B</PRENOM>
      <TYPE_PERS>PP</TYPE_PERS>
     </ROW>
     <ROW>
      <ID_DOSSIER>6647564</ID_DOSSIER>
      <NOM>BEDNITF</NOM>
      <PRENOM>EUCHST</PRENOM>
      <TYPE_PERS>PP</TYPE_PERS>
     </ROW>
     <ROW>
      <ID_DOSSIER>6648109</ID_DOSSIER>
      <NOM>KNOS</NOM>
      <PRENOM>JEANGUY</PRENOM>
      <TYPE_PERS>PP</TYPE_PERS>
     </ROW>
    </ROWSET>
    mais j'ai qque chose de ce genre :

    qui semble être mes numéros de dossiers l'un à la suite de l'autre.

    Quelqu'un pourrait-il me dire comment faire ? Une boucle peut-être avec un curseur ? Faut dire que l'exemple sur lequel je me suis basé et qui vient d'oracle ne contient qu'un seul enregistrement. Cela s'expliquerait.

    Merci,

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    tu as déjà un fichier canonique si je comprends bien tu n'as pas besoin d'un insert into

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
          v_context   DBMS_XMLSTORE.ctxType;
          v_rows      NUMBER;
       BEGIN
     v_context := DBMS_XMLSTORE.newContext (nom de la table cible);
     v_rows := DBMS_XMLSTORE.insertXML (v_context, le_xml_à_insérer);
     DBMS_XMLSTORE.closeContext (v_context);
    ....

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 50
    Points : 50
    Points
    50
    Par défaut
    Bonjour et merci

    Mais, je n'ai pas réussi à le faire en ce sens que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     v_rows := DBMS_XMLSTORE.insertXML (v_context, le_xml_à_insérer);
    pour le_xml_à_insérer il faut peut-être un XSL qui est mon problème car je ne veux que qques colonnes parmi l'ensemble.

    Je suis finalement passé par un SQL*LOADER qui m'a fait LA JOB comme on le dit ici à Québec.

    Merci,

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

Discussions similaires

  1. [SGBDR] [Oracle] [XSLT] Chargement de XML dans une table oracle
    Par Paxaranne dans le forum XQUERY/SGBD
    Réponses: 2
    Dernier message: 26/11/2010, 17h18
  2. import fichier XML dans une table oracle 10g
    Par aijedelachance dans le forum Import/Export
    Réponses: 0
    Dernier message: 08/02/2009, 22h52
  3. Réponses: 2
    Dernier message: 08/01/2009, 15h20
  4. probleme d'insertion de xml dans une table
    Par ghostdog dans le forum SQL
    Réponses: 2
    Dernier message: 26/02/2007, 16h12
  5. [Oracle] Importer du xml dans une table
    Par lenoil dans le forum Oracle
    Réponses: 2
    Dernier message: 05/06/2006, 14h06

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