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 :

Générer un fichier xml à partir d'une table clob [12c]


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 169
    Par défaut Générer un fichier xml à partir d'une table clob
    Bonjour ,

    J'ai un niveau tres tres moyen sur ORACLE.Je dois générer un document xml à partir d'une base de données , et je dispose de très peu de temps.
    j'ai créée une table XML avec du contenu xml.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TABLE DATA_XML (
                 document xmltype )
         xmltype document store as clob;
    Dans cette table DATA_XML,j'ai stocké une ligne xml.Comment copier la ligne xml de la table vers un document xml (Mon_Fichier.xml) en SQL (ou pl-sql), et comment récupérer le fichier généré.MERCI
    En me documentant , je suis tombé sur un package XMLDOM , et j'ai essayé le pl-sql suivant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE OR REPLACE directory Mon_Rep AS 'C:\temp';
    DECLARE                                                                                                                
        doc  DBMS_XMLDOM.DOMDocument;                                                                                        
        xdata  XMLTYPE;                                                                                                      
     
        CURSOR xmlcur IS                                                                                                     
        SELECT * from global_referentiel_xml                                                                                                                                                                                                               
      BEGIN                                                                                                                  
        OPEN xmlcur;                                                                                                         
        FETCH xmlcur INTO xdata;                                                                                             
        CLOSE xmlcur;                                                                                                        
        doc := DBMS_XMLDOM.NewDOMDocument(xdata);                                                                            
         DBMS_XMLDOM.WRITETOFILE(doc,'Mon_Rep/referentiel.xml');                                                                   
       END;
    Voici l'erreur générée ;
    "Erreur commençant à la ligne 2 de la commande :
    CREATE OR REPLACE directory Mon_Rep AS 'C:\temp'
    Erreur à la ligne de commande : 2, colonne : 0
    Rapport d'erreur :
    Erreur SQL : ORA-01031: privilèges insuffisants
    01031. 00000 - "insufficient privileges"
    *Cause: An attempt was made to change the current username or password
    without the appropriate privilege. This error also occurs if
    attempting to install a database without the necessary operating
    system privileges.
    When Trusted Oracle is configure in DBMS MAC, this error may occur
    if the user was granted the necessary privilege at a higher label
    than the current login.
    *Action: Ask the database administrator to perform the operation or grant
    the required privileges.
    For Trusted Oracle users getting this error although granted the
    the appropriate privilege at a higher label, ask the database
    administrator to regrant the privilege at the appropriate label.

    Erreur commençant à la ligne 3 de la commande :
    DECLARE
    doc DBMS_XMLDOM.DOMDocument;
    xdata XMLTYPE;

    CURSOR xmlcur IS
    SELECT * from global_referentiel_xml
    BEGIN
    OPEN xmlcur;
    FETCH xmlcur INTO xdata;
    CLOSE xmlcur;
    doc := DBMS_XMLDOM.NewDOMDocument(xdata);
    DBMS_XMLDOM.WRITETOFILE(doc,'Mon_Rep/referentiel.xml');
    END;

    Rapport d'erreur :
    ORA-06550: Ligne 8, colonne 5 :
    PL/SQL: ORA-00933: la commande SQL ne se termine pas correctement
    ORA-06550: Ligne 6, colonne 5 :
    PL/SQL: SQL Statement ignored
    ORA-06550: Ligne 9, colonne 5 :
    PLS-00103: Symbole "FETCH" rencontré à la place d'un des symboles suivants :

    begin function pragma procedure subtype type <identificateur>
    <identificateur entre guillemets> current cursor delete
    exists prior
    Symbole "begin" a été substitué à "FETCH" pour continuer.
    06550. 00000 - "line %s, column %s:\n%s"
    *Cause: Usually a PL/SQL compilation error.
    *Action: "

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,

    "insufficient privileges"
    A mon avis, tu as créé un directory, mais tu n'as pas donnée les droits de lecture / écriture sur ce directory au schema dans lequel ta procédure / ton code va s'executer ...

    @+

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 169
    Par défaut
    Bonsoir,

    Effectivement, peut être que je devrais ajouter un grant directory apres l'avoir créée.
    Du coup question : quand on créer un répertoire dans par exemple 'C:\Temp' via sqlDevelopper , il le crée en local ou bien sur la machine distante ?
    par ailleurs ,petit oubli de ";" après la déclaration du curseur dans le code pl-sql. Mais même avec ça , le pl-sql ne fonctionne pas , et je ne vois pas le problème.

    Merci de votre aide , ça devient désespérant de créer un fichier xml en pl-sql n'étant pas spécialiste Oracle

  4. #4
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Ma compréhension est la suivante: "create directory" ne créé pas de répertoire physique, uniquement une entité "logique" au niveau de la base de données, sur laquelle tu devras donner des droits pour que certains schémas puissent l'utiliser.
    Cela suppose que le répertoire visé existe bel et bien d'abord.
    D'ailleurs, je viens de tester un "create directory" sur un répertoire qui n'existe pas, et Oracle ne me dit rien si ce n'est "directory created". Mais je n'ai rien qui ait été créé physiquement sur le disque, et je doute qu'il apprécie si j'essaie d'utiliser pour de vrai ce directory.
    J'espère que je ne me plante pas sur ce que je comprends de ta question.

    Maintenant, pour écrire dans un fichier, je ne connais pas DBMS_XMLDOM, perso.
    Bien souvent j'utilise UTL_FILE.

    je pense que la première étape serait que tu t'assures que tu as un directory bien valide, avec un grant read / write pour le schema qui doit l'utiliser; vérifie au moins que tu peux lire un fichier tout bête dans ce répertoire via PL/SQL, histoire de ...

    @+

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 169
    Par défaut Droits obtenu et repertoire logique créée
    Merci bcp pour le retour .
    Hélas je ne connais pas UTL-FILE , et je ne sais pas s'il est installé . Je vais regarder.
    Si tu as un exemple simple de son utilisation je suis preneur.
    Quoi qu'il en soit merci de t'être penché sur le sujet.

  6. #6
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,
    Désolé de mes réponses tardives...
    Bon, je ne connaissais pas DBMS_XMLDOM, donc j'ai voulu jeter un oeil.

    J'ai fait un test très simple:
    1) Je me fais une table comme la tienne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE TABLE DATA_XML (
                 document xmltype )
         xmltype document store as clob;
    2) J'insère un enregistrement avec un XML dedans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    INSERT INTO DATA_XML
       VALUES(XMLType('<?xml version="1.0"?>
                        <PO pono="1">
                           <PNAME>Po_1</PNAME>
                           <CUSTNAME>John</CUSTNAME>
                           <SHIPADDR>
                              <STREET>1033, Main Street</STREET>
                              <CITY>Sunnyvalue</CITY>
                              <STATE>CA</STATE>
                           </SHIPADDR>
                        </PO>'));
    3) Dans un répertoire, je me suis fait un fichier "my_xml.xml".
    Dans Oracle, j'ai un directory "MY_DIRECTORY" qui pointe sur ce répertoire et j'ai donné les droits "read", "write" sur "MY_DIRECTORY" au schema dans lequel je fais mon test.

    4) Je fais tourner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    DECLARE
       the_xml      XMLTYPE;
       the_docdom   DBMS_XMLDOM.DOMDocument;
    BEGIN
       SELECT document INTO the_xml FROM data_xml;
     
       the_docdom := DBMS_XMLDOM.newDOMDocument (the_xml);
     
       DBMS_XMLDOM.WRITETOFILE(the_docdom,'MY_DIRECTORY/my_xml.xml');  
     
    END;
    -> le XML est écrit dans le fichier.

    @+

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

Discussions similaires

  1. Créer un fichier XML à partir d'une table
    Par Imageek dans le forum SQL
    Réponses: 2
    Dernier message: 06/03/2010, 15h51
  2. Récupérer des fichiers XML à partir d'une Table
    Par faraway dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/09/2009, 11h32
  3. Générer un fichier XML à partir d'une vue ?
    Par trailx dans le forum PL/SQL
    Réponses: 0
    Dernier message: 08/09/2008, 20h12
  4. [MySQL] Création d'un fichier xml à partir d'une table
    Par astrolane dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/12/2006, 23h12
  5. Réponses: 4
    Dernier message: 02/05/2005, 20h25

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