Mémoriser et réutiliser le pointeur d'un fichier déjà ouvert
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:
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 :
Citation:
ORA-29283: invalid file operation
Merci de votre aide.