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 :

UTL_FILE.FOPEN avec directory oracle


Sujet :

PL/SQL Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 155
    Par défaut UTL_FILE.FOPEN avec directory oracle
    Bonjour,

    Sous oracle 10g j'ai créé des directory (j'en avais besoin pour des external tables, par : CREATE OR REPLACE DIRECTORY inDir AS 'F:\MyPath', je voudrais savoir s'il est possible d'utiliser une de ces directory dans le UTL_FILE.FOPEN(directory, 'fic.log', w) ? Apparemment non mais comment peut-on récupérer la valeur de cette directory pour ouvrir ce fichier ?

    Cordialement.

  2. #2
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    je voudrais savoir s'il est possible d'utiliser une de ces directory dans le UTL_FILE.FOPEN(directory, 'fic.log', w) ?
    oui, bien sûr

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Par défaut
    Il faut simplement mettre ta directory en majuscule dans ton fopen ...

  4. #4
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Citation Envoyé par jlucch
    Il faut simplement mettre ta directory en majuscule dans ton fopen ...
    Oui. Pour vous en assurer, afficher le contenu de la vue USER_DIRECTORIES ou ALL_DIRECTORIES

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 155
    Par défaut
    Ca marche pas, y a une erreur de compil. : PLS-00201 : L'identificateur 'OUTDIR' doit être déclaré, et puis la signature de la méthode fopen semble attendre une chaîne de car., sinon je pourrais récupérer la valeur dans ALL_DIRECTORIES.

    Cordialement.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    si c'est un chemin de disque réseau ça peut pas marcher, il faut indiquer le chemin complet : //machine/répertoire

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 155
    Par défaut
    Ben si finalement ça marche, il faut mettre le nom de la directory en majuscule entre quote, et le chemin se trouve sur le disque F: qui est en réseau.


    Cordialement.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 155
    Par défaut
    J'enlève temporairement le 'Résolu' de ce topic, question subsidiaire sous Oracle 10g pour l'ouverture d'un fichier (UTL_FILE.FOPEN) est-on obligé de mettre un chemin (C:\....) ou une directory oracle (dans la table all_directories). Ou alors peut-on mettre un chemin après l'avoir mis dans all_directories (après un create directory) ?

    Cordialement.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par fguigui
    Ben si finalement ça marche, il faut mettre le nom de la directory en majuscule entre quote, et le chemin se trouve sur le disque F: qui est en réseau.
    ça doit être nouveau alors, en 9i ce n'était pas possible

    Sinon, je ne comprends pas la question... tu veux spécifier le chemin du directory qu'on trouve dans all_directories ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 155
    Par défaut
    Sinon, je ne comprends pas la question... tu veux spécifier le chemin du directory qu'on trouve dans all_directories ?
    Ben je voudrais, au choix, soit mettre un chemin (c:\.....) soit une directory oracle.

    ça doit être nouveau alors, en 9i ce n'était pas possible
    En fait j'ai directories oracle qui pointent sur le disque F: qui est en réseau, ça fonctionne (je suis en oracle 10g).

    Cordialement

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    bah oui, tu fais ce que tu veux, tu mets soit le chemin soit le directory

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 155
    Par défaut
    Citation Envoyé par Fred_D
    bah oui, tu fais ce que tu veux, tu mets soit le chemin soit le directory
    Apparemment, il faudra que je vérifie, ça fonctionnerait ainsi :
    - si on met un chemin : il faut qu'il soit sur le disque dur (C: ou D.
    - si on met une directory oracle, peu importe le chemin mis dans all_directories, qq soit le disque dur dans le réseau ça fonctionne.


    Cordialement

  13. #13
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    Je suis sur unix sous oracle 9
    J'ai suivi ce tuto:
    http://www.adp-gmbh.ch/ora/sql/create_directory.html

    J'ai essayé avec les DIRECTORY où il rentre dans l'exception
    -20054: 'Invalid Operation'

    En mettant directement le path "/tmp", je n'ai pas d'erreur mais le fichier sql_error.log n'est pas crée.

    Voici ma procédure:
    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
    CREATE OR REPLACE PROCEDURE ORACLE.utl_file_write (
      text       in varchar2)
    is
        output_file  utl_file.file_type;
    begin
        output_file := utl_file.fopen ('ERROR_LOG','sql_error.log', 'W');
        utl_file.put_line (output_file, text);
        utl_file.fclose(output_file);
    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 utl_file_write;
    /
    voici la fonction Pro*c qui appelle cette procédure:
    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
    long sqlerr_blank(void *contxt)
    {
    EXEC SQL BEGIN DECLARE SECTION;
      sql_context contx;
      int code;
      varchar msg[256];
    EXEC SQL END DECLARE SECTION;
     
      contx = contxt;
     
      EXEC SQL CONTEXT USE :contx;
      EXEC SQL WHENEVER SQLERROR CONTINUE;
      // on log les erreurs oracle si le code erreur est ngatif
      //if (sqlca.sqlcode <0)
      //{
    	//on insre un message dans alert log
    		//strcpy(code.arr,sqlca.sqlcode);
    		code = sqlca.sqlcode;
    		strcpy(msg.arr,sqlca.sqlerrm.sqlerrmc);
    		EXEC SQL EXECUTE
    			BEGIN 
    				utl_file_write (to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss') || ': Erreur SQL n' || :code || ': ' || :msg);
    			END;
    		END-EXEC;
      //} 
      return sqlca.sqlcode;
    }
    J'arrive à précompiler le .pc et à compiler le .c associé
    comprends pas pourquoi il ne me crée pas ce fichier de log

  14. #14
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    personne?

  15. #15
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    j'ai toujours pas trouvé comment résoudre ce problème...
    Si quelqu'un a réussi à créer un log avec oracle, pouvait me dire ce qui ne va pas dans la syntaxe...

  16. #16
    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 cassy Voir le message
    j'ai toujours pas trouvé comment résoudre ce problème...
    Si quelqu'un a réussi à créer un log avec oracle, pouvait me dire ce qui ne va pas dans la syntaxe...
    Cassy,

    ça remonte à loin c'est vrai, as-tu trouvé la réponse à ta question?

  17. #17
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Gérer un fichier via UTL_FILE quand on utilise pro*c, moi ça me laisse perplexe. (peut être pour exécuter le pro*c sur un poste client et écrire dans un fichier log sur le serveur)
    Donc, c'est quoi la question (avec la version d'Oracle SVP) ?

  18. #18
    Membre confirmé
    Inscrit en
    Février 2010
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 105
    Par défaut UTL_FILE.FOPEN avec directory oracle
    bjour Mr ,moi aussi je cherche cette question :executer le script dans le poste client en utilisant utl_file et modier un fichier oracle dans le serveur
    merci d'avance

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    FOPEN ne peut pas agir avec le client, juste le serveur. Il faut développer une méthode java me semble-t-il, ça a déjà été indiqué dans le forum.

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/02/2006, 23h12
  2. Probléme avec UTL_FILE.FOPEN
    Par elflamby dans le forum Oracle
    Réponses: 4
    Dernier message: 24/01/2006, 11h45
  3. [JDBC]Probleme avec trigger Oracle
    Par aurel89 dans le forum JDBC
    Réponses: 2
    Dernier message: 02/08/2005, 11h53
  4. problème avec job oracle
    Par cyberyan dans le forum Oracle
    Réponses: 3
    Dernier message: 29/03/2005, 18h16
  5. Commande fopen avec Mingw32
    Par Blitzz dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 29/10/2003, 11h07

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