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.
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 : 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 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 ...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 : Sélectionner tout - Visualiser dans une fenêtre à part
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;
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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à
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager