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

Oracle Discussion :

[Oracle 9i]Exporter Résulat SQL en XML


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 169
    Points : 40
    Points
    40
    Par défaut [Oracle 9i]Exporter Résulat SQL en XML
    Bonjour,

    je me demande quelle est la meilleure façon de créer un fichier XML contenant le résultat d'une requéte sur Oracle. En fait, j'aimerais que cela soit possible à partir du lancement d'un script par un client léger...
    Dois-je me pencher vers le XDK ou autre chose de mieux?

    Merci d'avance et bonne journée!

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut Re: [Oracle 9i]Exporter Résulat SQL en XML
    Citation Envoyé par kobe
    je me demande quelle est la meilleure façon de créer un fichier XML contenant le résultat d'une requéte sur Oracle.
    Salut,

    As-tu jeté un oeil au package DBMS_XMLQuery ?

    Edit : un petit exemple on-line :
    http://www.oracle-base.com/articles/9i/GenerateXML1.sql

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 169
    Points : 40
    Points
    40
    Par défaut
    Ok merci, je vais me pencher la-dessus!

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 169
    Points : 40
    Points
    40
    Par défaut
    Excuse moi, mais après avoir essayé l'exemple, j'ai inlassablement la même erreur qui me dit que le chemin n'est pas valide...
    Pourtant, sur le Utl_File.FOpen, je lui donne en 1er argument 'C:\X' ou X est bien un répertoire qui existe...
    Ya t'il quelque chose qui manque dans l'exemple ou alors il faut définir un autre endroit particulier?

  5. #5
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par kobe
    a t'il quelque chose qui manque dans l'exemple ou alors il faut définir un autre endroit particulier?
    Cf http://sheikyerbouti.developpez.com/...?page=Chap8#L8

    Pour utiliser le package Utl_File, tu dois avoir le droit de créer des fichiers sur le répertoire concerné (ex paramètre UTL_FILE_DIR).

    je pense que ça répond à ton souci.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 169
    Points : 40
    Points
    40
    Par défaut
    Heu en fait, j'ai bien défini un répertoire et donné les droits pour tout le monde dessus comme indiqué dans le lien que tu m'as donné mais ça ne fonctionne tjs pas...je ne vois pas ce qui manque!

    Mais en fait je me demandais aussi pkoi il créait un répertoire pour les fichiers en entree et un pour les fichiers en sortie? Je suppose que c'est juste pour l'exemple non?

  7. #7
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Je ne vois pas non plus ...

    Essaye SANS utiliser Utl_File :

    Voilà une fonction qui affiche le contenu du XML via dbms_Output :
    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
    CREATE OR REPLACE PROCEDURE OutPut_Fichier (fichier IN OUT NOCOPY CLOB) IS
      ContenuXML VARCHAR2 (32767);
       Ligne VARCHAR2 (2000);
     BEGIN
     
    ContenuXML := dbms_lob.SUBSTR(fichier, 32767);
     
    LOOP
      EXIT WHEN ContenuXML IS NULL;
      -- découpe en lignes :
      Ligne := SUBSTR(ContenuXML, 1, INSTR(ContenuXML, CHR(10)) - 1);
      dbms_output.put_line (Ligne);
      ContenuXML := SUBSTR(ContenuXML, INSTR(ContenuXML, CHR(10)) + 1);
    END LOOP;
    END;
    /
    Et sur Scott/Tiger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SET SERVEROUTPUT ON SIZE 1000000
     
    DECLARE
      fichier CLOB;
    BEGIN
    fichier := dbms_XMLQuery.getXML('SELECT * FROM EMP');
    OutPut_Fichier(fichier);
     
    END;
    /

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 169
    Points : 40
    Points
    40
    Par défaut
    Bon alors voila ou j'en suis...
    J'ai essayé le code que tu m'as donné Xo et ça m'affiche bien sous sqlplus le résultat de ma requete sous forme XML...
    Reste que j'ai bien crée un répertoire avec mon compte 'sys' et mis les droit dessus, lorsque je me connecte avec mon utilisateur et que je teste le code pour mettre dans un ficher, j'ai tjs la même erreur...

  9. #9
    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
    Ton répertoire est en local ou sur le serveur de base de données ? Pour rappel, UTL_FILE enregistre uniquement sur le serveur de base de données.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 169
    Points : 40
    Points
    40
    Par défaut
    En fait ma base de données est en local et je spécifie comme répertoire 'C:\prog' sur mon poste...

  11. #11
    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
    Peux-tu nous mettre le code exact que tu as implémenté (création du répertoire, droits, script sql de génération du xml) ?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 169
    Points : 40
    Points
    40
    Par défaut
    Ok, pas de souci...

    Création du répertoire et droits avec le compte 'sys':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SQL> CREATE DIRECTORY FIC AS 'C:\PRG\OT' ;
     
    Répertoire créé.
     
    SQL> GRANT READ, WRITE ON DIRECTORY FIC TO PUBLIC ;
     
    Autorisation de privilèges (GRANT) acceptée.
    Script SQL de génération du XML:
    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
     
    SET SERVEROUTPUT ON
    DECLARE
      v_file  Utl_File.File_Type;
      v_xml   CLOB;
      v_more  BOOLEAN := TRUE;
    BEGIN
      -- Create XML document from query.
      v_xml := DBMS_XMLQuery.GetXML('SELECT table_name, tablespace_name FROM user_tables WHERE rownum < 6');
     
      -- Output XML document to file.
      v_file := Utl_File.FOpen('C:\PRG\OT', 'test1.xml', 'w');
      WHILE v_more LOOP
        Utl_File.Put(v_file, Substr(v_xml, 1, 32767));
        IF Length(v_xml) > 32767 THEN
          v_xml :=  Substr(v_xml, 32768);
        ELSE
          v_more := FALSE;
        END IF;
      END LOOP;
      Utl_File.FClose(v_file);
     
    EXCEPTION
      WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE(Substr(SQLERRM,1,255));
        Utl_File.FClose(v_file);
    END;
    /
    Merci d'avance, je sans que j'ai fais une grosse boulette de débutant...

  13. #13
    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
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v_file := Utl_File.FOpen('FIC', 'test1.xml', 'w');

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 169
    Points : 40
    Points
    40
    Par défaut
    Merci! C'est super ça marche mtn!
    Par contre pour revenir ma demande, c'est un bon début, mais ça ne correpond pas à ce que je veux faire puisque je voudrais faire ça a partir d'un script JSP...
    J'ai pas mal lu la doc oracle au sujet du processeur XSLT mais j'avoues que je n'ai pas compris grand chose...rien que l'installation sous Tomcat me parait floue!
    Est-ce que quelqu'un saurait comment je dois procéder pour faire la même chose que ce script PL\SQL mais avec du JSP?

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 169
    Points : 40
    Points
    40
    Par défaut
    Bon euh...je vois que personne n'utilise le XDK d'Oracle...ça m'étonne mais bon...je retente!
    En fait après avoir lu la doc, je pense qu'il est possible à partir d'un fichier XSQL de générer un fichier XML à partir de la requête contenue dans le XSQL...seulement est-ce qu'l est possible d'obtenir exactement le XML que l'on veut en controlant l'imbrication par exemple à la requête qui va tout me renvoyer à plat? Si quelqu'un connait un peu, ça serait sympa de m'éclairer sur le sujet! Merci d'avance!

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 169
    Points : 40
    Points
    40
    Par défaut
    Heu bon, si j'ai bien compris, on ne peut finalement pas avoir de fichier XML crée physiquement avec XSQL sur le disque... Alors il me faut une autre solution pour mon problème...Toujours personne pour une petite idée? (Désolé de faire remonter le post, mais c'est vrai que je suis bien perdu sur ce sujet!)

  17. #17
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    XSQL peut etre appelé programmatiquement en java.
    d'ailleurs XSQL utilise des templates (plusieurs SQLs) pour generer un xml

    XSU est utilise par XSQL, et XSU permet de transformer une requete SQL (pas de template) en XML. XSU peut etre utilisé a part de XSQL

    a+

Discussions similaires

  1. Réponses: 10
    Dernier message: 09/08/2016, 18h56
  2. Exporter Résulat SQL en XML
    Par majd91 dans le forum Import/Export
    Réponses: 1
    Dernier message: 03/06/2013, 14h13
  3. [11g] Exporter Résulat SQL en XML
    Par majd91 dans le forum SQL
    Réponses: 1
    Dernier message: 30/04/2013, 08h58
  4. [Oracle 9i] export ASCII du code SQL d'une vue
    Par milox dans le forum Oracle
    Réponses: 3
    Dernier message: 26/03/2007, 14h43
  5. [XML] Exporter le résultat d'une requête SQL en XML
    Par radiobrain dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 20/11/2006, 14h36

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