Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/01/2011, 13h08   #1
Membre confirmé
 
Inscription : décembre 2002
Messages : 450
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 450
Points : 265
Points : 265
Par défaut Tester présence d'un fichier en lecture

Hello tout le monde,

J'ai une procédure qui lit un fichier. Pour la rendre plus robuste, j'aimerais bien tester la présence de ce fichier et ainsi générer ou non ligne dans un log d'erreur.

J'ai donc tout de suite penser à faire un sous bloc et de gérer l'exception jeter par fopen.

Code :
1
2
3
4
5
6
7
8
   begin 
   f_file_id := UTL_FILE.FOPEN(v_file_location, 'mon_fichier.txt', 'r');
   exception
   			WHEN OTHERS THEN
			dbms_output.put_line('DEDANS erreur'||SQLERRM);
			raise;
   end;
/
Malheureusement, j'obtiens l'erreur suivante :


J'ai bien sûr regardé la documentation de F_OPEN sur dvp :
http://sheikyerbouti.developpez.com/...e=Chap8#L8.2.5

Comment puis je attraper l'exception ?
weed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 13h15   #2
Membre du Club
 
Wissem
Inscription : janvier 2011
Messages : 56
Détails du profil
Informations personnelles :
Nom : Wissem

Informations forums :
Inscription : janvier 2011
Messages : 56
Points : 66
Points : 66
Envoyer un message via MSN à orawiss Envoyer un message via Skype™ à orawiss
Bonjour,

Merci de vérifier d'abord que Oracle a les priviléges suffisants pour accéder au repertoire oracle.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
DECLARE
  v_filetype  utl_file.file_type;
BEGIN
  v_filetype := utl_file.fopen('ORA-DIR', 'file_test.dbf', 'R');
 
  IF utl_file.is_open(v_filetype) THEN
    dbms_output.put_line('The File exists');
  Else
    dbms_output.put_line('The File dos not exists');
  END IF;
EXCEPTION WHEN OTHERS THEN
dbms_output.put_line(' Exception:'||SQLERRM);
END;

Merci,
Wissem
www.oracle-class.com (Vidéos, Articles, Livres, Forum, Webinar ...tous sur Oracle)
www.oracle-tns.com
OCA & OCP Oracle
orawiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 13h32   #3
Membre confirmé
 
Inscription : décembre 2002
Messages : 450
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 450
Points : 265
Points : 265
J'ai testé et à ma grande surprise, j'ai eu le droit à une erreur différente dans toad. Malheureusement, elle n'a pas été attrapé.


Citation:
ORA-29282: ID de fichier non valide
ORA-06512: à "AGRESSO.CHARGE_DATASCAN_CAMF", ligne 233
ORA-06512: à ligne 1
Selon, c'est au niveau de fopen qu'il faut gérer. fopen tente d'ouvrir un fichier et génère un "descripteur de fichier". Si fopen n'est pas capable d'ouvrir, il devrait nous le dire envoyant une exception.

Faire un is_open est opération qui "se fait trop tard". Cette fonction est selon moi, utile si on a fermé le fichier ou pas. Si on a fermé le fichier, on réouvre le fichier par fopen.

merci orawiss mais malheureusement ta solution ne semblerait pas fonctionner.
weed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 13h37   #4
Membre du Club
 
Wissem
Inscription : janvier 2011
Messages : 56
Détails du profil
Informations personnelles :
Nom : Wissem

Informations forums :
Inscription : janvier 2011
Messages : 56
Points : 66
Points : 66
Envoyer un message via MSN à orawiss Envoyer un message via Skype™ à orawiss
1- Merci d'envoyer votre DDL de création du directory?
2- Est ce que Oracle a les accès lecture / écriture sur ce répertoire Ç


Merci,
Wissem
www.oracle-class.com (Vidéos, Articles, Livres, Forum, Webinar ...tous sur Oracle)
www.oracle-tns.com
OCA & OCP Oracle
orawiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 13h50   #5
Membre confirmé
 
Inscription : décembre 2002
Messages : 450
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 450
Points : 265
Points : 265
Ahh oui, je n'ai pas répondu sur ce point.
Les directory ont bien été créé. Je peux parfaitement lire mes fichiers à l'heure actuel (et en écriture).

Je voulais juste créer une procédure plus robuste.
Si je n'ai pas de fichier en entrée => écrire dans mon fichier de log que le fichier n'existe pas.
A l'heure actuel, j'ai une erreur si le fichier est absent. Ma procédure se bloque. A terme, la procédure sera lancé automatiquement. C'est pour cette raison que j'aimerais bien gagné en robustesse.

Ce n'est pas moi qui régle les directory. Mais à titre d'info :
Code :
1
2
SELECT *
FROM dba_directories;
Citation:
SYS;REP_INT;d:\integration
Et j'utilise


Code :
1
2
3
4
5
6
7
8
9
10
   declare
   f_file_id UTL_FILE.FILE_TYPE;
   v_file_location VARCHAR2(256) := 'REP_INT';
   begin 
   f_file_id := UTL_FILE.FOPEN(v_file_location, 'mon_fichier.txt', 'r');
   exception
   			WHEN OTHERS THEN
			dbms_output.put_line('DEDANS erreur'||SQLERRM);
			raise;
   end;
weed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 14h35   #6
Membre du Club
 
Wissem
Inscription : janvier 2011
Messages : 56
Détails du profil
Informations personnelles :
Nom : Wissem

Informations forums :
Inscription : janvier 2011
Messages : 56
Points : 66
Points : 66
Envoyer un message via MSN à orawiss Envoyer un message via Skype™ à orawiss
Bonjour,

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
35
 
 
[oracle@wissem ~]$ sqlplus /nolog
 
SQL*Plus: Release 11.2.0.1.0 Production ON Fri Jan 28 14:19:51 2011
 
Copyright (c) 1982, 2009, Oracle.  ALL rights reserved.
 
SQL> connect sys AS sysdba
Enter password: 
Connected.
SQL> 
SQL> CREATE directory test AS '/tmp';
Directory created.
SQL> declare
  V_check_file_exist BOOLEAN;
  test_a number;
  test_b number;
begin
dbms_output.put_line ('test si fichier existe');
utl_file.fgetattr ('TEST', 'myfile.txt', V_check_file_exist, test_a, test_b );
IF V_check_file_exist then
dbms_output.put_line('Fichier existe');
end IF;
IF NOT V_check_file_exist then
dbms_output.put_line('Fichier n est pas existant');
end IF;
end;  2    3    4    5    6    7    8    9   10   11   12   13   14  
 15  /
test si fichier existe
Fichier n est pas existant
 
PL/SQL procedure successfully completed.
 
SQL>


Merci,
Wissem
www.oracle-class.com (Vidéos, Articles, Livres, Forum, Webinar ...tous sur Oracle)
www.oracle-tns.com
OCA & OCP Oracle
orawiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 16h06   #7
Membre confirmé
 
Inscription : décembre 2002
Messages : 450
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 450
Points : 265
Points : 265
C'est vraiment très sympa de ta part orawiss d'avoir cherché une solution que tu ne connaissais pas au début


J'ai testé avant hier et cela fonctionne parfaitement.
weed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 02h08   #8
Membre du Club
 
Wissem
Inscription : janvier 2011
Messages : 56
Détails du profil
Informations personnelles :
Nom : Wissem

Informations forums :
Inscription : janvier 2011
Messages : 56
Points : 66
Points : 66
Envoyer un message via MSN à orawiss Envoyer un message via Skype™ à orawiss
content d'avoir aidé

Merci,
Wissem
www.oracle-class.com (Vidéos, Articles, Livres, Forum, Webinar ...tous sur Oracle)
www.oracle-tns.com
OCA & OCP Oracle
orawiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h47.


 
 
 
 
Partenaires

Hébergement Web