Bonjour à tous
Dans le cadre d'un projet j'ai du créer une procédure qui permet de généré un fichiers tous les X temps.
J'aimerai que si mon select ne trouve aucune ligne , le fichier ne soit pas crée.
Actuellement il est crée systématiquement avec la première ligne et l'en-tête.
Ci-dessous la procédure
Si vous avez une idée je suis preneur
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 create or replace PROCEDURE Export_RESERV_ENTRYToCSV AS file_handle UTL_FILE.FILE_TYPE; BEGIN -- Ouvrir le fichier pour ecriture file_handle := UTL_FILE.FOPEN('EXPORT_DIR', 'Resa_ENTRY-' || TO_CHAR(SYSDATE, 'YYMMDDHH24MISS') || '.csv', 'W', 32767); -- Ecrire la premiere ligne contenant la date et le nom du fichier UTL_FILE.PUT_LINE(file_handle, TO_CHAR(SYSDATE, 'DD.MM.YYYY HH24:MI:SS') || ';' || 'Resa_ENTRY-' || TO_CHAR(SYSDATE, 'YYMMDDHH24MISS') || '.csv'); -- Ecrire l'en-tete UTL_FILE.PUT_LINE(file_handle, 'NumResaExt;XENTRYTIME'); FOR rec IN (SELECT * FROM RESERV_ENTRY WHERE ExpDateTime IS NULL and LRESERVSTATUS=11 and xentrytime IN(select MAX(xentrytime) from reserv_entry GROUP BY LORDERREF) order by xentrytime desc) LOOP UTL_FILE.PUT_LINE(file_handle, '"' || rec.NumResaExt ||'";'|| TO_CHAR(rec.XENTRYTIME, 'DD.MM.YYYY HH24:MI:SS') ); -- Mettre a jour ExpDateTime avec la date et l'heure de l'export UPDATE RESERV_ENTRY SET ExpDateTime = SYSTIMESTAMP WHERE NumResaExt = rec.NumResaExt; END LOOP; UTL_FILE.FCLOSE(file_handle); EXCEPTION WHEN OTHERS THEN -- ici la gestion des erreurs IF UTL_FILE.IS_OPEN(file_handle) THEN UTL_FILE.FCLOSE(file_handle); END IF; RAISE; END;
Merci
Partager