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 :

creation d'un fichier


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de etoile_de_vie
    Inscrit en
    Juillet 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 131
    Par défaut creation d'un fichier
    Bonjour,
    je veux créer un ficher .txt affichant des données suite à un clic sur un bouton en utilisant la bibliothèque UTL_FILE,
    J'ai créé un utilisateur ayant les privilèges sysoper et sysdba mais pas de fichier créé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    declare 
    output_file  UTL_FILE.file_type;
     
    begin
    output_file := utl_file.fopen ('c:\','decision.txt', 'W');
    utl_file.put_line (output_file, 'HELLO');
    utl_file.fclose(output_file);
     
    end;

  2. #2
    Membre éprouvé Avatar de laurentleturgez
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 88
    Par défaut
    Bonjour,

    Tu dois créer un DIRECTORY et le passer à la procédure FOPEN. Tu ne peux pas lui donner directement le répertoire.

    Voilà ce que tu peux faire :
    1. Création du directory
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SQL> create directory REP as 'c:\';
    SQL> grant read,write on directory REP to scott;
    2. Lancement de la procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    connect scott/tiger
    
    declare 
    output_file  UTL_FILE.file_type;
    begin
    output_file := utl_file.fopen ('REP','decision.txt', 'W');
    utl_file.put_line (output_file, 'HELLO');
    utl_file.fclose(output_file);
    end;
    /
    Laurent

  3. #3
    Membre confirmé Avatar de etoile_de_vie
    Inscrit en
    Juillet 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 131
    Par défaut
    En executant la procédure directement sur SQL*PLS, ça fonctionne. Mais à partir du forms (en cliquant sur un bouton une exception est déclenchée etant donné j'ai crée le repertoire sous SQL*PLUS puis le corps de la procédure dans le déclencheur when-button_pressed

    FRM-407735:Le déclencheur when-button_pressed a détécté un exception ORA-29280 non traitée

  4. #4
    Membre éprouvé Avatar de laurentleturgez
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 88
    Par défaut
    Avec quel utilisateur as tu créé le directory ?
    Visiblement, il y a un problème de droit sur ce directory :
    - soit l'utilisateur avec lequel tu l'as créé est différent de celui qui lance le forms
    - soit l'utilisateur système avec lequel tu lances le forms n'a pas les droits d'écriture sur le répertoire système (C:\).
    ou autre : je ne connais pas très bien forms ... est-ce que le programme se lance avec l'utilisateur système oracle ?

    Quoiqu'il en soit, ca ressemble à un problème de droit :
    $ oerr ORA 29280
    29280, 00000, "invalid directory path"
    // *Cause: A corresponding directory object does not exist.
    // *Action: Correct the directory object parameter, or create a corresponding
    // directory object with the CREATE DIRECTORY command.
    Cela dit, je ne te conseille pas de mettre tes fichiers dans C:\, il vaut mieux que tu créé un repertoire système spécifique, que tu lui associes un directory oracle, et que tu donnes les droits systèmes sur ce répertoire à tous les utilisateurs ayant droits de lecture/ecriture sur ce répertoire.
    Enfin, c'est juste des questions de sécurité et de "propreté" du système de fichier.

    Laurent

  5. #5
    Membre confirmé Avatar de etoile_de_vie
    Inscrit en
    Juillet 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 131
    Par défaut
    1. j'ai créé le répertoire avec l'utilisateur sys et j'ai donné les autorisations à un user nommé fort
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SQL> CREATE directory REP AS 'c:\';
    SQL> grant read,write on directory REP to fort;
    2. je me connecte à l'application avec l'utilisateur fort

    et tout ceci fonctionne bien à partir de SQL*PLUS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SQL> connect fort/fort@dbsdi
    Connecté.
    SQL> declare 
      2  output_file  UTL_FILE.file_type;
      3  begin
      4  output_file := utl_file.fopen ('REP','decision.txt', 'W');
      5  utl_file.put_line (output_file, 'HELLO');
      6  utl_file.fclose(output_file);
      7  end;
      8  /
    Mais moi je veux que cette procédure se lance à partir du forms (en cliquant sur un bouton de l'application)

  6. #6
    Membre éprouvé Avatar de laurentleturgez
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 88
    Par défaut
    Et l'application Forms, avec quel utilisateur système se lance-t-elle ?

    Tu as essayé de poster ta question dans la partie forms du forum ?

  7. #7
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par laurentleturgez Voir le message
    Tu dois créer un DIRECTORY et le passer à la procédure FOPEN. Tu ne peux pas lui donner directement le répertoire.
    Il est certain qu'il est préférable d'utiliser cette méthode, mais dans l'absolu, la méthode à l'ancienne avec UTL_FILE_DIR fonctionne toujours, au moins jusqu'en 10g.

  8. #8
    Membre éprouvé Avatar de laurentleturgez
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 88
    Par défaut
    Exact ... mais à trop voir de paramètre utl_file_dir positionné à '*' ... j'ai supprimé cette méthode de ma mémoire

    Laurent

  9. #9
    Membre confirmé Avatar de etoile_de_vie
    Inscrit en
    Juillet 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 131
    Par défaut
    Citation Envoyé par Pomalaix Voir le message
    Il est certain qu'il est préférable d'utiliser cette méthode, mais dans l'absolu, la méthode à l'ancienne avec UTL_FILE_DIR fonctionne toujours, au moins jusqu'en 10g.
    - J'utilise oracle 9i et forms 6i.
    - Ce qui paraît que le répertoire doit être définit à partir du forms.
    Comment je peut le définir avec utl_file_dir ? sachant que précedemment j'ai mis dans le fichier init.ora: utl_file_dir = c:\REP

  10. #10
    Membre éprouvé Avatar de laurentleturgez
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 88
    Par défaut
    Dans ce cas, positionne le paramètre utl_file_dir à 'C:\'

  11. #11
    Membre confirmé Avatar de etoile_de_vie
    Inscrit en
    Juillet 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 131
    Par défaut
    Citation Envoyé par laurentleturgez Voir le message
    Dans ce cas, positionne le paramètre utl_file_dir à 'C:\'
    où je la positionne et comment je l'utilise dans la procédure PL/SQL

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

Discussions similaires

  1. Creation d'un fichier XML avec ASP encoder en UTF-8
    Par freeze_land dans le forum ASP
    Réponses: 6
    Dernier message: 14/02/2007, 10h59
  2. [CSV] Creation d'un fichier csv côté client
    Par Taz_8626 dans le forum Langage
    Réponses: 6
    Dernier message: 31/03/2006, 09h48
  3. Creation d'un fichier commun !!
    Par Shandler dans le forum C++
    Réponses: 2
    Dernier message: 24/02/2005, 12h00
  4. Date de création d'un fichier
    Par cap38 dans le forum Linux
    Réponses: 14
    Dernier message: 28/04/2004, 14h06
  5. creation d un fichier jar ou .exe en java
    Par sadjia dans le forum JBuilder
    Réponses: 13
    Dernier message: 13/12/2002, 16h01

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