Bonjour,

Je dois extraire des données d'une table et les mettre dans un fichier en fonction de la valeur d'1 des colonnes.

J'ai donc fais un curseur pour parcourir la table et je génère un nom de fichier pour chacune des valeurs de la colonne et je le stocke dans une collection.

Mon problème est de retrouver le pointeur du fichier déjà créé et ouvert pour écrire dans le bon fichier lorsqu'une valeur se représente après la première fois

Voici une partie du code, celle qui est concernée par le problème
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
DECLARE
CURSOR c_lecture_traces(date_limite_purge IN DATE) 
IS SELECT DATE_TRACE__TMS, COMPO_INIT__CHR, TECHNO__CHR, 
          NIVEAU_TRACE__CHR, COMPO_TRACE__CHR, TYP_COUCHE__CHR, 
          NOM_ETAPE__CHR, TYP_COMPO__CHR, MESSAGE_CODE__CHR, 
          MESSAGE_TEXTE__CHR, DESC_EXCEPTION__CHR, DETAILS__CHR, 
          FONCTION_APPELEE__CHR, FONCT_NUM_LIGNE__ENT, MESSAGE_DATE_RECEP__TMS, 
          MESSAGE_NOM_QUEUE__CHR, DATE_CREAT__DTE, NOM_CREATEUR__CHR, 
          DATE_MODIF__DTE, NOM_MODIF__CHR
   FROM   LOG_TRACES
   WHERE  DATE_TRACE__TMS < date_limite_purge ;
 
   -- l'idée ici est de stocker le pointeur du fichier en fonction du nom du fichier
   TYPE TYPE_INFOS_FICHIER IS TABLE OF UTL_FILE.FILE_TYPE INDEX BY VARCHAR2(100) ;
   infos_fichier TYPE_INFOS_FICHIER ;
 
BEGIN
    -- Recherche de la date limite de conservation des traces
    SELECT TRUNC(SYSDATE-5) INTO date_purge FROM dual;
 
    -- Lecture de toutes les traces avant la date de purge
    FOR lecture_colonnes IN c_lecture_traces (date_purge+1)
    LOOP
        date_trace := TO_CHAR(lecture_colonnes.DATE_TRACE__TMS, 'YYYYMMDD');
        serveur := TRIM(lecture_colonnes.NOM_CREATEUR__CHR);
	composant := TRIM(lecture_colonnes.COMPO_INIT__CHR);
 
	nom_fichier := COMPOSANT || '-' || date_trace || '-' || serveur ;
 
        IF infos_fichier.EXISTS(nom_fichier) = FALSE THEN
		    infos_fichier(nom_fichier) := UTL_FILE.FOPEN( 'LOG_EXTRACTDIR', nom_fichier, 'W', 32767 ) ;
        END IF;
 
....
Et l'erreur est :
ORA-29283: invalid file operation
Merci de votre aide.