Bonjour à tous et d'avance merci à ceux qui pourront m'aider.

Dans le cadre de mon travail, je dois réaliser l'extraction de certains champs d'une dizaine de table de base de données au format csv (ou txt).

Je pensais tout d'abord utiliser le package dbms_output, mais celui-ci borne la longueur des lignes à 255 caractères. Or, mes lignes dépassent allègrement les 300/400 caractères, et je n'ai pas trouvé de moyen pour augmenter cette taille.
Je me suis donc rabattu sur un package que je n'ai encore jamais utilisé, mais dont j'avais entendu parler : UTL_FILE.

Celui-ci semble permettre des lignes de 1000 caractères, mais malheureusement j'ai une exception à l'exécution.


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
44
45
46
47
48
49
50
51
52
53
54
55
56
spool C:\Extraction\clients.log
 
Set linesize 10000
set feedback off
set flush off
set heading off
set headsep off
set timing off
set pagesize 0
set recsep off
set termout off
set trimspool on
set verify off
set wrap on
set pause off
set serveroutput on
 
DECLARE     
	handle UTL_FILE.FILE_TYPE ;
	chaine varchar2(30) := 'test écriture';
	ouvert boolean;
	excep  exception;
        message varchar2(50);
        repertoire Varchar(30)   := 'C:\Extraction';
        fichier varchar(30) := 'test.txt';
 
BEGIN
 
	begin
		handle := UTL_FILE.FOPEN(repertoire, fichier, 'W', 32764);
		Exception
		When OTHERS Then
			message := sqlerrm;
                        raise excep;
		ouvert := UTL_FILE.IS_OPEN( handle );
		-- Petit test "alacon"
                if ouvert = true then
		  dbms_output.put_line('fichier ouvert ');
		else
		  dbms_output.put_line('fichier non ouvert ');
		end if;
    End;
 
 
	UTL_FILE.PUT_LINE( handle, chaine ) ;
	UTL_FILE.FCLOSE( handle ) ;
 
Exception
   When excep Then
     UTL_FILE.FCLOSE_ALL ;
     RAISE_APPLICATION_ERROR( -20100, message ) ;
 
END;
/
spool off
exit

Et voici l'exception que j'obtiens :

DECLARE
*
ERROR at line 1:
ORA-20100: User-Defined Exception
ORA-06512: at line 33

La ligne 33 est bien évidemment la ligne correspondant à mon RAISE_APPLICATION_ERROR.
Je n'arrive pas d'une part à savoir ce que signifie cette exception, et encore moins à la résoudre.

J'espère que vous pourrez m'aider.

PS : je suis sous Oracle 9I