Bonjour,
Je dispose d'une table dans Oracle dont une de mes colonnes est de type 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 CREATE TABLE GED_XML ( ID_GED_XML NUMBER, GED_XML_SPEC SYS.XMLTYPE )
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.
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) )
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 :
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 ... 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) ); ....
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
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); ...
Exemple :
Pour ce fichier en entrée et qui est contenu dans GED_XML_SPEC, je m'attends à avoir 5 enregistrements dans ma table
mais j'ai qque chose de ce genre :
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>
qui semble être mes numéros de dossiers l'un à la suite de l'autre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 6.15229263892336E69
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,
Partager