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,