[Oracle] Insertion Xml dans une table
Bonjour,
Je dispose d'une table dans Oracle dont une de mes colonnes est de type XMLTYPE
Code:
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:
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:
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:
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:
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 :
Code:
6.15229263892336E69
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,