IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Tester présence d'un fichier en lecture


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 230
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 230
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  2. #2
    Membre éclairé
    Inscrit en
    Janvier 2011
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 56
    Par défaut
    Bonjour,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre éprouvé

    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 230
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 230
    Par défaut
    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é.


    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.

  4. #4
    Membre éclairé
    Inscrit en
    Janvier 2011
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 56
    Par défaut
    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

  5. #5
    Membre éprouvé

    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 230
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 230
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT *
    FROM dba_directories;
    SYS;REP_INT;d:\integration
    Et j'utilise


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2011
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 56
    Par défaut
    Bonjour,

    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
    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

  7. #7
    Membre éprouvé

    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 230
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 230
    Par défaut
    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.

  8. #8
    Membre éclairé
    Inscrit en
    Janvier 2011
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 56
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tester présence variable dans fichier en shell
    Par cobra85 dans le forum Linux
    Réponses: 1
    Dernier message: 13/07/2009, 18h48
  2. Réponses: 0
    Dernier message: 18/01/2008, 11h48
  3. [Upload] Tester présence de fichier uploadé
    Par jcaspar dans le forum Langage
    Réponses: 1
    Dernier message: 27/04/2007, 11h31
  4. Réponses: 4
    Dernier message: 27/04/2006, 17h51
  5. Réponses: 11
    Dernier message: 02/04/2004, 18h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo