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

PL/SQL Oracle Discussion :

Chargement d'un XML en tables avec PL/SQL


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Chargement d'un XML en tables avec PL/SQL
    Bonjour à tous,

    Quelqu'un aurait-il un source PL/SQL réalisant un chargement de tables objets Oracle, via les procs du package DBMS_XMLSAVE, à partir d'un fichier XML déjà chargé dans un CLOB ?

    Vous me seriez d'une aide trés précieuse .

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073

  3. #3
    Candidat au Club
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Cette réponse utilise les procs du package DBMS_XMLQUERY (dans le sens Oracle vers XML).
    Je souhaite plutot avoir des exemples de scripts PL/SQL pour charger des tables oracle avec un fichier XML .

    Merci.

  4. #4
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Il me semble que ce lien pourra t'intéresser :
    http://asktom.oracle.com/pls/ask/f?p=4950:8:4407922884164842212::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:2853285548502
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  5. #5
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Voici également un exemple trouvé sur le metalink pour insérer mettre à jour et supprimer des données :
    PURPOSE
    -------
    The purpose of this document is to provide a very simple example (from start to
    finish) on how to insert, update and delete rows into Oracle database using XML
    parser for PL/SQL

    SCOPE & APPLICATION
    -------------------
    This document is not intended to teach XML. The purpose of this document is
    to provide a working example of how you use some of the features of the Oracle
    XDK.
    How to DML XML rows into the database using XSU?

    1.-Create the table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE empleados (empid NUMBER PRIMARY KEY, 
    empname VARCHAR2(30), 
    empjob VARCHAR2(30), 
    empsal NUMBER);
    2.-Create a procedure to insert rows into this table using XSU.
    -- This procedure is generic for all tables
    -- You can insert using this procedure in any table
    -- xmlDoc can be VARCHAR2 or CLOB
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create or replace procedure InsertXML(xmlDoc IN VARCHAR2, tableName IN VARCHAR2) is 
    insCtx DBMS_XMLSave.ctxType; 
    rows number; 
    begin 
    insCtx := DBMS_XMLSave.newContext(tableName); -- get the context handle 
    rows := DBMS_XMLSave.insertXML(insCtx,xmlDoc); -- this inserts the document 
    dbms_output.put_line(to_char(rows) || ' rows inserted'); 
    DBMS_XMLSave.closeContext(insCtx); -- this closes the handle 
    end; 
    /
    3.-Execute the procedure to insert
    Assuming thet we have this XML document...
    <?xml version="1.0"?>
    <ROWSET>
    <ROW num="1">
    <EMPID>10</EMPID>
    <EMPNAME>Perry Smith</EMPNAME>
    <EMPJOB>Manager</EMPJOB>
    <EMPSAL>800</EMPSAL>
    </ROW>
    <ROW num="1">
    <EMPID>20</EMPID>
    <EMPNAME>John Calvach</EMPNAME>
    <EMPJOB>Principal Support Consultant</EMPJOB>
    <EMPSAL>900</EMPSAL>
    </ROW>
    <ROW num="1">
    <EMPID>30</EMPID>
    <EMPNAME>Louis Bald</EMPNAME>
    <EMPJOB>Technical Specialist</EMPJOB>
    <EMPSAL>400</EMPSAL>
    </ROW>
    <ROW num="1">
    <EMPID>40</EMPID>
    <EMPNAME>Anthony Flowers</EMPNAME>
    <EMPJOB>Technical Team Leader</EMPJOB>
    <EMPSAL>500</EMPSAL>
    </ROW>
    <ROW num="1">
    <EMPID>50</EMPID>
    <EMPNAME>George Monk</EMPNAME>
    <EMPJOB>Support Consultant</EMPJOB>
    <EMPSAL>200</EMPSAL>
    </ROW>
    </ROWSET>

    ... we can execute the procedure like this:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQL> exec InsertXML('<?xml version="1.0"?><ROWSET><ROW num="1"><EMPID>10</EMPID><EMPNAME>Perry Smith</EMPNAME><EMPJOB>Manager</EMPJOB><EMPSAL>800</EMPSAL></ROW><ROW 
    num="1"><EMPID>20</EMPID><EMPNAME>John Calvach</EMPNAME><EMPJOB>Principal Support Consultant</EMPJOB><EMPSAL>900</EMPSAL></ROW><ROW 
    num="1"><EMPID>30</EMPID><EMPNAME>Louis Bald</EMPNAME><EMPJOB>Technical Specialist</EMPJOB><EMPSAL>400</EMPSAL></ROW><ROW num="1"><EMPID>40</EMPID><EMPNAME>Anthony 
    Flowers</EMPNAME><EMPJOB>Technical Team Leader</EMPJOB><EMPSAL>500</EMPSAL></ROW><ROW num="1"><EMPID>50</EMPID><EMPNAME>George Monk</EMPNAME><EMPJOB>Support Consultant</EMPJOB><EMPSAL>200</EMPSAL></ROW></ROWSET>','empleados'); 
    5 rows inserted 
    PL/SQL procedure successfully completed.
    4.-Create a procedure to update rows into this table using XSU.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    -- Like in insert procedure, xmlDoc can be VARVCHAR2 or CLOB 
    create or replace procedure UpdateEmpleados ( xmlDoc IN VARCHAR2) is 
    updCtx DBMS_XMLSave.ctxType; 
    rows number; 
    begin 
    updCtx := DBMS_XMLSave.newContext('empleados'); -- get the context 
    DBMS_XMLSave.clearUpdateColumnList(updCtx); -- clear the update settings.. 
    DBMS_XMLSave.setKeyColumn(updCtx,'EMPID'); -- set EMPNO as key column 
    rows := DBMS_XMLSave.updateXML(updCtx,xmlDoc); -- update the table. 
    dbms_output.put_line(to_char(rows) || ' rows updated'); 
    DBMS_XMLSave.closeContext(updCtx); -- close the context..! 
    end; 
    /
    5.-Execute the procedure to update rows...
    Assuming thet we have this XML document...
    <?xml version="1.0"?>
    <ROWSET>
    <ROW num="1">
    <EMPID>10</EMPID>
    <EMPNAME>Perry Smith Johnson</EMPNAME>
    </ROW>
    <ROW num="1">
    <EMPID>20</EMPID>
    <EMPJOB>Principal Support Consultant I</EMPJOB>
    <EMPSAL>700</EMPSAL>
    </ROW>
    <ROW num="1">
    <EMPID>30</EMPID>
    <EMPSAL>700</EMPSAL>
    </ROW>
    </ROWSET>

    ... we can execute the procedure like this:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SQL> exec UpdateEmpleados('<?xml version="1.0"?><ROWSET><ROW num="1"><EMPID>10</EMPID><EMPNAME>Perry Smith Johnson</EMPNAME></ROW><ROW 
    num="1"><EMPID>20</EMPID><EMPJOB>Principal Support Consultant I</EMPJOB><EMPSAL>700</EMPSAL></ROW><ROW num="1"><EMPID>30</EMPID><EMPSAL>700</EMPSAL></ROW></ROWSET>'); 
    3 rows updated 
    PL/SQL procedure successfully completed.
    6.-Create a procedure to delete rows into this table using XSU.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    -- Like in above examples xmlDoc can be VARCHAR2 or CLOB 
    create or replace procedure DeleteEmpleados(xmlDoc IN VARCHAR2) is 
    delCtx DBMS_XMLSave.ctxType; 
    rows number; 
    begin 
    delCtx := DBMS_XMLSave.newContext('empleados'); 
    DBMS_XMLSave.setKeyColumn(delCtx,'EMPID'); 
    rows := DBMS_XMLSave.deleteXML(delCtx,xmlDoc); 
    dbms_output.put_line(to_char(rows) || ' rows deleted'); 
    DBMS_XMLSave.closeContext(delCtx); 
    end; 
    /
    Assuming thet we have this XML document...
    <?xml version="1.0"?>
    <ROWSET>
    <ROW num="1">
    <EMPID>50</EMPID>
    </ROW>
    </ROWSET>
    ... we can execute the procedure like this:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQL> exec DeleteEmpleados('<?xml version="1.0"?><ROWSET><ROW num="1"><EMPID>50</EMPID></ROW></ROWSET>'); 
    1 rows deleted 
    PL/SQL procedure successfully completed.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  6. #6
    Candidat au Club
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Des réponses bien appréciables dans des situations de crises (nerveuses)

    Merci bien.



    La seule question idiote est la question qu'on ne pose pas !

  7. #7
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Si cela résoud ton problème, n'oublie pas le bouton résolu
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  8. #8
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Concernant le sujet "Chargement d'un XML en tables avec PL/SQL", j'ai essayer de réutiliser les exemples sités ci-dessus :

    1-Les procédures 'InsertXML', 'UpdateEmpleados ' et 'DeleteEmpleados' sont bien créées, mais lorsque je fais un appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec InsertXML('<?xml version="1.0"?><ROWSET><ROW num="1"><EMPID>10</EMPID><EMPNAME>Perry Smith</EMPNAME><EMPJOB>Manager</EMPJOB><EMPSAL>800</EMPSAL></ROW><ROW num="1"><EMPID>20</EMPID><EMPNAME>John Calvach</EMPNAME><EMPJOB>Principal Support Consultant</EMPJOB><EMPSAL>900</EMPSAL></ROW><ROW num="1"><EMPID>30</EMPID><EMPNAME>Louis Bald</EMPNAME><EMPJOB>Technical Specialist</EMPJOB><EMPSAL>400</EMPSAL></ROW><ROW num="1"><EMPID>40</EMPID><EMPNAME>Anthony Flowers</EMPNAME><EMPJOB>Technical Team Leader</EMPJOB><EMPSAL>500</EMPSAL></ROW><ROW num="1"><EMPID>50</EMPID><EMPNAME>George Monk</EMPNAME><EMPJOB>Support Consultant</EMPJOB><EMPSAL>200</EMPSAL></ROW></ROWSET>','empleados');
    j'ai les erreurs suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ERREUR à la ligne 1 :
    ORA-29532: appel Java arrêté par une exception Java non interceptée :
    java.lang.ExceptionInInitializerError
    ORA-06512: à "SYS.DBMS_XMLSAVE", ligne 111
    ORA-06512: à "AXEL.INSERTXML", ligne 6
    ORA-06512: à ligne 1

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

Discussions similaires

  1. [2008] Purge de Tables avec T-SQL
    Par dari68 dans le forum Administration
    Réponses: 6
    Dernier message: 22/07/2014, 18h21
  2. [SQL] Fusion plus de 2 tables avec proc sql
    Par Olive2011 dans le forum SAS Base
    Réponses: 10
    Dernier message: 06/07/2012, 15h08
  3. Faire l'économie d'une table avec PL/SQL
    Par HRS dans le forum PL/SQL
    Réponses: 7
    Dernier message: 03/05/2012, 21h38
  4. Table avec requête SQL sous l'éditeur.
    Par Jefty dans le forum WebDev
    Réponses: 0
    Dernier message: 29/02/2012, 11h06
  5. "fusion" de trois tables avec traitement SQL
    Par Requin15 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 09/11/2006, 21h34

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