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 ?