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
    Futur Membre du Club
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 3
    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
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 3
    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
    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

  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
    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.

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 3
    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
    Par défaut
    Si cela résoud ton problème, n'oublie pas le bouton résolu

  8. #8
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 9
    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