PL/SQL : exception à l'utilisation de UTL_FILE
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:
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 :
Citation:
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