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

SQL Oracle Discussion :

Ecriture dans un fichier || difficultés


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Par défaut Ecriture dans un fichier || difficultés
    Bonjour,

    Je rencontre quelques problèmes pour écrire le résultat d'une requête dans un fichier . Voici mon code

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
       -- Test du package UTL_FILE
        --
        CREATE OR REPLACE PROCEDURE Test_util_file IS
          	ref_fichier UTL_FILE.FILE_TYPE;
    	LC$Ligne    Varchar2(32767) ;
    	LC$Requete	Varchar2(10000) ;
    	TYPE REFCUR1 IS REF CURSOR ;
    	 cur		REFCUR1;
        BEGIN
          ref_fichier := UTL_FILE.FOPEN('c:\julien','test.txt','w');
    	LC$Requete := 'SELECT * FROM TABLE';
          Open cur For LC$Requete ;
      Loop
    	Fetch cur Into LC$Ligne ;
    	Exit when cur%NOTFOUND ;
    	-- Ecriture du fichier de sortie --
    	  UTL_FILE.PUT_LINE( ref_fichier, LC$Ligne ) ;
    	  UTL_FILE.PUT( ref_fichier, 'test2');
      End loop ;
     
      Close cur ;
          UTL_FILE.FFLUSH(ref_fichier);
          UTL_FILE.FCLOSE(ref_fichier);
        EXCEPTION
          -- traitement des erreurs rencontrees
          WHEN NO_DATA_FOUND THEN
              DBMS_OUTPUT.PUT_LINE ('Pas de donnée trouvée.');
              UTL_FILE.FCLOSE(ref_fichier);
          WHEN UTL_FILE.INVALID_PATH THEN 
              DBMS_OUTPUT.PUT_LINE ('UTL_FILE.INVALID_PATH invalide.');
              UTL_FILE.FCLOSE(ref_fichier);
          WHEN UTL_FILE.READ_ERROR THEN 
              DBMS_OUTPUT.PUT_LINE ('UTL_FILE.READ_ERROR invlide.');
              UTL_FILE.FCLOSE(ref_fichier);
          WHEN UTL_FILE.WRITE_ERROR THEN 
              DBMS_OUTPUT.PUT_LINE ('UTL_FILE.WRITE_ERROR invalide.');
              UTL_FILE.FCLOSE(ref_fichier);
          WHEN OTHERS THEN 
              DBMS_OUTPUT.PUT_LINE ('Autre erreur.');
              UTL_FILE.FCLOSE(ref_fichier);
        END; -- fin de la procedure
            -- le signe / execute la procedure sous SQL*Plus
        /
    Et l'appel de cette procédure >>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    BEGIN 
    test_util_file; 
    END;
    /
    J'ai bien le fichier qui se crée, ainsi que le simple message test1, mais tout ce qui est dans la boucle (LOOP) ne s'écrit pas ...

    Quelqu'un a t'il une idée ?

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Il est où le test1 ??

    Sinon, tu es sur de ta requête ?
    Tu n'as qu'à l'afficher par un DBMS_OUTPUT, et aussi mettre un dbms_output dans le LOOP.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Par défaut
    Salut,
    ah effectivement j'ai viré test1 que j'avais placé au dessus de la boucle, et ca l'écrivait bien dans le fichier ...

    Apparemment c'est la boucle qui pose problème, pourtant la requête me retourne bien des résultats sous SQL*Plus ...

    Pour ce qui est de DBMS_OUTPUT ya peut-être un problème

    SQL> set serveroutput on
    SQL> BEGIN
    2 DBMS_OUTPUT.ENABLE( 1000000 ) ;
    3 DBMS_OUTPUT.PUT( 'test');
    4 END;
    5 /

    Procédure PL/SQL terminée avec succès.

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Fais un PUT_LINE, avec que le PUT, la chaine reste dans le buffer et ne ressort pas automatiquement.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Par défaut
    Ca donne la meme chose c étrange

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Essayes avec la requête réelle (sans passer par des ' et avec un FOR LOOP)
    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
     CREATE OR REPLACE PROCEDURE Test_util_file IS
      	ref_fichier UTL_FILE.FILE_TYPE;
    	LC$Requete	VARCHAR2(10000) ;
    BEGIN
        ref_fichier := UTL_FILE.FOPEN('c:\julien','test.txt','w');
     
        IF UTL_FILE.isopen(ref_fichier)
        THEN
            FOR r IN SELECT col1 ||';'||col2 AS ligne FROM TABLE;
            LOOP
                -- Ecriture du fichier de sortie --
                DBMS_OUTPUT.PUT_LINE('Ecriture ligne');
                UTL_FILE.PUT_LINE( ref_fichier, r.ligne ) ;
            END LOOP ;
     
              UTL_FILE.FFLUSH(ref_fichier);
              UTL_FILE.FCLOSE(ref_fichier);
         ELSE
            DBMS_OUTPUT.PUT_LINE('Fichier non créé');
         END IF; 
    END;

Discussions similaires

  1. probleme d'ecriture dans un fichier texte
    Par azrael88370 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/01/2005, 17h33
  2. Script shell - écriture dans un fichier
    Par Leishmaniose dans le forum Linux
    Réponses: 6
    Dernier message: 13/12/2004, 22h48
  3. Probleme d'ecriture dans un fichier en mode Text
    Par bbozet dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/01/2004, 13h46
  4. [LG]ecriture dans un fichier binaire
    Par jsaviola dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2003, 17h30
  5. Réponses: 2
    Dernier message: 26/09/2003, 14h51

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