Bonjour à tous
Je fais quelques tests avec UTL_FILE mais je ne parviens pas à mes fins, alors je me permets de venir vous demander votre aide. Je précise que suis débutant en PL/SQL.
Je définis ma procédure comme suit :
Code sql : 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 SET echo ON SET feedback ON SET term ON SET serveroutput ON CREATE OR REPLACE directory mydir AS 'G:\7000 DEVNAT\7300 LCBHoS\7310 Projets-Maintenances-Etudes\01-Projets\MOA-MOE\P-Interface LCB-SINERGI\Scripts de reprise des données\01-DEV220\01-ZCN3'; GRANT READ,WRITE ON DIRECTORY mydir TO user; CREATE OR REPLACE PROCEDURE generateFile(fileName in varchar2) IS CURSOR c_get_cltd IS select distinct idbien from llcbtbien; l_r_fileHandler UTL_FILE.FILE_TYPE; l_s_open_mode CONSTANT VARCHAR2(1) := 'w'; l_bi_max_linesize CONSTANT BINARY_INTEGER := 690; l_s_outputLine VARCHAR2(690); l_d_currentdate DATE; BEGIN l_r_fileHandler := UTL_FILE.FOPEN(location => 'MYDIR', filename => fileName, open_mode => l_s_open_mode, max_linesize => l_bi_max_linesize); FOR c_get_cltd_rec IN c_get_cltd LOOP l_s_outputLine := c_get_cltd_rec.idbien; UTL_FILE.PUT_LINE(file => l_r_fileHandler,buffer => l_s_outputLine); END LOOP; UTL_FILE.FFLUSH(l_r_fileHandler); UTL_FILE.FCLOSE(l_r_fileHandler); EXCEPTION WHEN UTL_FILE.INVALID_PATH THEN dbms_output.put_line('invalid path'); WHEN UTL_FILE.INVALID_MODE THEN dbms_output.put_line('invalid mode'); WHEN UTL_FILE.INVALID_MAXLINESIZE THEN dbms_output.put_line('invalid maxlinesize'); WHEN UTL_FILE.INVALID_FILEHANDLE THEN dbms_output.put_line('invalid filehandle'); WHEN UTL_FILE.INVALID_OPERATION THEN dbms_output.put_line('invalid operation'); WHEN UTL_FILE.WRITE_ERROR THEN dbms_output.put_line('write_error'); END generateFile; /
La procédure se crée sans erreur sous SQL*Plus. Je l'exécute ensuite de la manière suivante :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part execute generateFile('test.txt');
Et SQL*Plus m'affiche "invalid operation"... C'est donc une exception UTL_FILE.INVALID_OPERATION qui est levée. Mais je ne vois vraiment pas pourquoi. Le chemin vers le répertoire est correct. Le fichier cible existe et il me semble que la commande GRANT assure les droits en écriture sur ce répertoire au user courant oracle. Je ne sais plus trop où chercher...
Une idée ? Merci !
Partager