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

  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
    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
    Et l'application Forms, avec quel utilisateur système se lance-t-elle ?
    Elle se lance avec l'utilisateur fort/fort@dbsdi

  8. #8
    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.

  9. #9
    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

  10. #10
    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

  11. #11
    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:\'

  12. #12
    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

  13. #13
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter system set utl_file_dir='c:\' scope=spfile;
    Puis tu redémarres ton instance. Tu peux contrôler la prise en compte avec la commande show parameter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SYS@db11g > show parameter utl_file
     
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    utl_file_dir                         string      c:\
    Ensuite tu rejoues le code initial :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    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;

  14. #14
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQL> ALTER system SET utl_file_dir='c:\' scope=spfile;
     
    Système modifié.
    Mais j'ai obtenu ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> SHOW parameter utl_file
     
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- 
    utl_file_dir                         string
    VALUE reste vide

  15. #15
    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
    Cela signifie que tu utilises un fichier de paramètre statique : PFILE.

    Tu dois mettre la main sur ce fichier, y ajouter la ligne :
    UTL_FILE_DIR='C:\'

    et redémarrer ton instance, en lui spécifiant ce fichier.
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQL> startup pfile=c:\fichier_pfile.ora

  16. #16
    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
    ça n'a pas marché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQL> startup pfile=C:\oracle\admin\dbsdi\pfile.init.ora
    LRM-00109: impossible d'ouvrir le fichier de paramètres 'C:\oracle\admin\dbsdi\pfile.init.ora'
    ORA-01078: échec de traitement de paramètres système

  17. #17
    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
    euuh il existe ce fichier : C:\oracle\admin\dbsdi\pfile.init.ora ??

    109, 0, "could not open parameter file '%.*s'"
    // *Cause: The parameter file does not exist.
    // *Action: Create an appropriate parameter file.

  18. #18
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter system set utl_file_dir='c:\' scope=spfile;
    Puis tu redémarres ton instance. Tu peux contrôler la prise en compte avec la commande show parameter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SYS@db11g > show parameter utl_file
     
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    utl_file_dir                         string      c:\
    Ensuite tu rejoues le code initial :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    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;
    J'ai réessayé une deuxième fois, En redémarrant mon instance ça bien fonctionné

    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
    SQL> ALTER system SET utl_file_dir='c:\' scope=spfile;
     
    Système modifié.
     
    SQL> shutdown immediate
    Base de données fermée.
    Base de données démontée.
    Instance ORACLE arrêtée.
    SQL> 
    SQL> startup open
    Instance ORACLE lancée.
     
    Total System Global Area  135338868 bytes
    Fixed Size                   453492 bytes
    Variable Size             109051904 bytes
    Database Buffers           25165824 bytes
    Redo Buffers                 667648 bytes
    Base de données montée.
    Base de données ouverte.
    SQL> show user
    USER est "SYS"
    SQL> SHOW parameter utl_file
     
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- 
    utl_file_dir                         string      c:\
    SQL>
    Merci à vous tous

+ 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