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 :

Oracle 10g: Ecrire dans un fichier


Sujet :

PL/SQL Oracle

  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Par défaut Oracle 10g: Ecrire dans un fichier
    Bonjour tout le monde. J'ai l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORA-20052: Invalid File Location
    En essayant d'écrire dans un fichier. Mon code est le suivant.

    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
     
    PROCEDURE FILEWRITE_TEXT( p_texte IN VARCHAR2, p_filepath IN VARCHAR2, p_fileName IN VARCHAR2) AS
    lf_file_id    UTL_FILE.FILE_TYPE;
     
    BEGIN 
      dbms_output.put_line(lsFilePath);
      lf_file_id := UTL_FILE.FOPEN(p_filepath, p_fileName, 'w');
      UTL_FILE.PUT_LINE(lf_file_id, p_texte);
      UTL_FILE.FCLOSE (lf_file_id);
      EXCEPTION
      WHEN utl_file.invalid_mode THEN
        RAISE_APPLICATION_ERROR (-20051, 'Invalid Mode Parameter');
      WHEN utl_file.invalid_path THEN
        RAISE_APPLICATION_ERROR (-20052, 'Invalid File Location');
      WHEN utl_file.invalid_filehandle THEN
        RAISE_APPLICATION_ERROR (-20053, 'Invalid Filehandle');
      WHEN utl_file.invalid_operation THEN
        RAISE_APPLICATION_ERROR (-20054, 'Invalid Operation');
      WHEN utl_file.read_error THEN
        RAISE_APPLICATION_ERROR (-20055, 'Read Error');
      WHEN utl_file.write_error THEN
        RAISE_APPLICATION_ERROR (-20056, 'Read Error');   
      WHEN utl_file.internal_error THEN
        RAISE_APPLICATION_ERROR (-20057, 'Internal Error');
      WHEN utl_file.charsetmismatch THEN
        RAISE_APPLICATION_ERROR (-20058, 'Opened With FOPEN_NCHAR But Later I/O Inconsistent');
      WHEN utl_file.invalid_maxlinesize THEN
        RAISE_APPLICATION_ERROR(-20060,'Line Size Exceeds 32K');
      WHEN others THEN
        RAISE_APPLICATION_ERROR (-20099, 'Unknown UTL_FILE Error');	
    END FILEWRITE_TEXT;
    La procédure stockée, je l'appelle avec les arguments suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      P_FILEPATH := 'D:\MONREP\';
      P_FILENAME := 'MONFIC.TXT';
    Mon répertoire existe. Quant à mon fichier NON.

    L'erreur est provoquée par le FOPEN.

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    C'est pas le chemin mais la DIRECTORY correspondante qu'il faut passer en paramètre.

    http://download.oracle.com/docs/cd/B...e.htm#i1004619

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Par défaut
    Citation Envoyé par orafrance Voir le message
    C'est pas le chemin mais la DIRECTORY correspondante qu'il faut passer en paramètre.

    http://download.oracle.com/docs/cd/B...e.htm#i1004619
    Merci pour votre réponse.
    J'ai cru (dans un forum) lire que le répertoire peut être soit un directory ou un chemin... C'est pour cela que j'ai donné un chemin.

    Par ailleurs, j'ai créé un directory :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SQL> create or replace directory monrep as 'D:\MONREP\';
     
    Répertoire créé.
     
    SQL> grant write,read on directory monep to mamid;
     
    Autorisation de privilèges (GRANT) acceptée.
    J'ai appelé ma fonction avec les paramètre suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    P_FILEPATH := 'MONREP';
    P_FILENAME := 'MONFIC.TXT';
    Mais j'ai toujours l'erreur.

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    le répertoire existe-t-il bien sur le serveur oracle ?

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Par défaut
    Citation Envoyé par orafrance Voir le message
    le répertoire existe-t-il bien sur le serveur oracle ?
    Oui.
    La base de donnée est en locale. Et j'ai bien mon répertoire.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Avril 2006
    Messages : 35
    Par défaut
    Essaye voir d'ôter le \ à la fin

    CREATE OR REPLACE directory monrep AS 'D:\MONREP';

    Et là je sais pas s'il s'agit ou non que d'une erreur de frappe :

    grant write,read on directory monep to mamid;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    grant write,read on directory monrep to mamid;

  7. #7
    Membre confirmé
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Par défaut
    Citation Envoyé par olwin Voir le message
    Essaye voir d'ôter le \ à la fin

    CREATE OR REPLACE directory monrep AS 'D:\MONREP';

    Et là je sais pas s'il s'agit ou non que d'une erreur de frappe :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    grant write,read on directory monrep to mamid;
    Oui c juste une erreur de frappe.

    Merci Olwin.

  8. #8
    Membre confirmé
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Par défaut
    Je veux dire que j'ai bien écrit mes deux requetes.
    Pourtant, j'ai toujours l'erreur persiste toujours.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Avril 2006
    Messages : 35
    Par défaut
    Que donne un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from all_directories;
    Concernant l'erreur c'est toujours l'erreur
    ORA-20052: Invalid File Location
    ou il s'agit d'un autre message d'erreur ?

    Le répertoire est local ou s'agit t'il d'un point de montage ?

  10. #10
    Membre confirmé
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Par défaut
    Ce que j'ai fait : au lieu de passer en paramètre le nom de mon directory :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    lf_file_id := UTL_FILE.FOPEN('MONREP', p_fileName, 'w');
    Et là ça a marché.

    Je ne comprends plus rien!!!

  11. #11
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    il me semble que le nom du DIRECTORY doit être en majuscule à la création

  12. #12
    Membre confirmé
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Par défaut
    Citation Envoyé par orafrance Voir le message
    il me semble que le nom du DIRECTORY doit être en majuscule à la création
    Effectivement. En créant le directory en majuscule, ça marche!

    Merci OraFrance.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Avril 2006
    Messages : 35
    Par défaut
    Ce comportement est quand même bizarre !

    Mais je note : toujours crée les directories en majuscule pour éviter les erreurs

  14. #14
    Membre confirmé
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Par défaut
    Citation Envoyé par olwin Voir le message
    Ce comportement est quand même bizarre !

    Mais je note : toujours crée les directories en majuscule pour éviter les erreurs
    Oui.
    Tout à l'heure, j'ai créé le directory en minuscule et j'ai appelé la fonction avec le nom du directory en majuscule. Je me suis dit qu'il serait sensible à la casse.
    Pour confirmer ce que vient de dire orafrance, j'ai créé le directory en minuscule et lors de l'appel j'ai gardé le nom en minuscule. Et ça n'a pas marché!

    Donc oui, il faut créé le directory avec un nom en majuscule.

    Merci encore.

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

Discussions similaires

  1. [Oracle 9i]PLSQL: Ecrire dans un fichier
    Par mamid1706 dans le forum PL/SQL
    Réponses: 6
    Dernier message: 16/03/2011, 18h17
  2. Oracle 10g - spool dans un fichier
    Par E.Dupre dans le forum SQL
    Réponses: 4
    Dernier message: 04/11/2010, 15h16
  3. Ecrire dans un fichier avec PL/SQL (oracle)
    Par Titouf dans le forum PL/SQL
    Réponses: 3
    Dernier message: 02/10/2005, 06h36
  4. Ecrire dans un fichier grace à un trigger ?
    Par zigoo dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 29/10/2004, 20h03
  5. Ecrire dans un fichier sans supprimer le reste
    Par koan_sabian dans le forum Linux
    Réponses: 4
    Dernier message: 20/02/2003, 15h44

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