Je désire lire un fichier texte, et remplir une table, sans déclencher l'exception WHEN OTHERS, quand il essaie de lire au-delà de la dernière ligne.
La raison est que j'ai du code après ce traitement, et l'exception atteint le bloc principal.
Version imprimable
Je désire lire un fichier texte, et remplir une table, sans déclencher l'exception WHEN OTHERS, quand il essaie de lire au-delà de la dernière ligne.
La raison est que j'ai du code après ce traitement, et l'exception atteint le bloc principal.
Bonjour,
Il suffit de faire une boucle avec gestion de fin de fichier avec un goto ( vais-je me faire incendier :o) ? :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 loop begin UTL_FILE.GET_LINE (fic, enr); exception WHEN no_data_found THEN goto fin; end; entree.C_CLE := substr(enr, 14, 14); entree.D_PAIE := substr(enr, 67, 8); entree.N_PAIE := substr(enr, 75, 4); update paiement set C_TRESO = entree.C_CLE where D_PAIE = to_date(entree.D_PAIE,'yyyymmdd') and N_PAIEMENT = to_number(entree.N_PAIE); end loop; <<fin>>
capturer l'exception NO DATA_FOUND déclenchée par le end-of-file
J'ai sûrement un problème dans la gestion de mes exceptions, car j'encapsule mon GET_LINE avec un bloc exception, mais l'erreur va dans le bloc exception principal du programme, et avec une exception WHEN OTHERS, et non pas WHEN NO_DATA_FOUND.
Est-ce que c'est possible de compter le nombre de lignes d'un fichier ?
oui car pour sortir d'une boucle il y a EXIT ... :wink:Citation:
Envoyé par echoes
pour le reste, pourrais-tu delphim nous envoyer ton code ...
J'ai réglé le problème avec cette fonction :
- si TRUE, je fais mon traitement
- si FALSE, je ferme le fichier et sort de la boucle (avec EXIT)
Ca marche très bien.
<code>
FUNCTION FCT_get_nextline
(file_in IN UTL_FILE.FILE_TYPE) RETURN BOOLEAN IS
vBuffer VARCHAR2(1950);
BEGIN
UTL_FILE.GET_LINE (file_in, vBuffer);
RETURN TRUE;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN FALSE;
END;
</code>
Vous pouvez également faire :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 BEGIN ... Begin Loop UTL_FILE.GET_LINE... ..... End loop ; Exception when no_data_found Then UTL_FILE.FCLOSE... End ; .... ..... END;
En effet Marc , je ne sais pas pourquoi j'ai fait un goto surtout que j'ai des exit when cursort%notfound et autres un peu partout !! un moment de folie
8O ou une réminiscence de l'époque où je faisais du cobol ???
Je me vais me corriger ça !
J'ai changé mon binz avec :
Code:
1
2
3
4
5
6
7 begin UTL_FILE.GET_LINE (fic, enr); exception WHEN no_data_found THEN exit; end;
attention même avec du Cobol, certains obligent l'utilisation des PERFORM (mauvais souvenirs que tu nous rappelles là :wink: