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] invalid operation


Sujet :

PL/SQL Oracle

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Par défaut [UTL_FILE] invalid operation
    Bonjour à tous

    Je fais quelques tests avec UTL_FILE mais je ne parviens pas à mes fins, alors je me permets de venir vous demander votre aide. Je précise que suis débutant en PL/SQL.

    Je définis ma procédure comme suit :
    Code sql : 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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    SET echo ON
    SET feedback ON
    SET term ON
    SET serveroutput ON
     
    CREATE OR REPLACE directory mydir AS 'G:\7000 DEVNAT\7300 LCBHoS\7310 Projets-Maintenances-Etudes\01-Projets\MOA-MOE\P-Interface LCB-SINERGI\Scripts de reprise des données\01-DEV220\01-ZCN3';
    GRANT READ,WRITE ON DIRECTORY mydir TO user;
     
    CREATE OR REPLACE PROCEDURE generateFile(fileName in varchar2) IS 
     
        CURSOR c_get_cltd IS select distinct idbien from llcbtbien;
     
    	l_r_fileHandler    UTL_FILE.FILE_TYPE;
    	l_s_open_mode      CONSTANT VARCHAR2(1) := 'w'; 
    	l_bi_max_linesize  CONSTANT BINARY_INTEGER := 690;
    	l_s_outputLine     VARCHAR2(690);
    	l_d_currentdate    DATE;
     
    	BEGIN
     
    		l_r_fileHandler := UTL_FILE.FOPEN(location => 'MYDIR',
    										   filename => fileName,
    										   open_mode => l_s_open_mode,
    										   max_linesize => l_bi_max_linesize);
     
    		FOR c_get_cltd_rec IN c_get_cltd LOOP  
    			l_s_outputLine := c_get_cltd_rec.idbien;
    			UTL_FILE.PUT_LINE(file => l_r_fileHandler,buffer => l_s_outputLine);
    		END LOOP; 
     
    		UTL_FILE.FFLUSH(l_r_fileHandler);
    		UTL_FILE.FCLOSE(l_r_fileHandler); 
     
    		EXCEPTION 
    		WHEN UTL_FILE.INVALID_PATH THEN 
    			 dbms_output.put_line('invalid path'); 
    		WHEN UTL_FILE.INVALID_MODE THEN 
    			 dbms_output.put_line('invalid mode');
    		WHEN UTL_FILE.INVALID_MAXLINESIZE THEN 
    			 dbms_output.put_line('invalid maxlinesize');
    		WHEN UTL_FILE.INVALID_FILEHANDLE THEN 
    			 dbms_output.put_line('invalid filehandle');
    		WHEN UTL_FILE.INVALID_OPERATION THEN 
    			 dbms_output.put_line('invalid operation');
    		WHEN UTL_FILE.WRITE_ERROR THEN
    			 dbms_output.put_line('write_error');
     
    END generateFile;
     
    /

    La procédure se crée sans erreur sous SQL*Plus. Je l'exécute ensuite de la manière suivante :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    execute generateFile('test.txt');

    Et SQL*Plus m'affiche "invalid operation"... C'est donc une exception UTL_FILE.INVALID_OPERATION qui est levée. Mais je ne vois vraiment pas pourquoi. Le chemin vers le répertoire est correct. Le fichier cible existe et il me semble que la commande GRANT assure les droits en écriture sur ce répertoire au user courant oracle. Je ne sais plus trop où chercher...

    Une idée ? Merci !

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 58
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT READ,WRITE ON DIRECTORY mydir TO user;

    Ceci grant l'accès en lecture/écriture au directory Oracle "mydir" à l'utilisateur qui exécute le bloc.

    Cependant, l'objet "mydir" n'est qu'un pointeur vers un dossier du système de fichier. Tu peux définir les accès VIA ORACLE avec des grants, mais tout ceci est indépendant des droits d'accès vers le répertoire définis sur le système de fichier...

    En particulier, l'utilisateur OS qui fait tourner la base doit avoir le droit d'accès en lecture écriture sur le répertoire "G:\7000 DEVNAT\7300 LCBHoS\7310 Projets-Maintenances-Etudes\01-Projets\MOA-MOE\P-Interface LCB-SINERGI\Scripts de reprise des données\01-DEV220\01-ZCN3".

    Ceci doit être fait au niveau OS (windows ou unix), et ne peut pas être fait depuis la base.


    [Edit] Si la base à effectivement accès en R/W au répertoire de l'OS, en effet, comme l'a dit McM, savoir où ça plante pourrait déjà aider un peu

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    La base du débug : A quelle ligne de ta procédure l'erreur est-elle levée ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Par défaut
    Merci beaucoup pour votre réactivité !

    Je me mets en relation avec notre DB admin pour tirer au clair cette histoire de droits.

  5. #5
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    as tu vérifié la valeur du parametre d'intialisation UTL_FILE

    la commande...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    show parameter UTL_FILE

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Par défaut
    merci à tous pour vos réponses, mais suite à une discussion avec un expert Oracle nous allons mettre en place une autre solution pour résoudre notre problème

    je continuerai peut-être à fouiller quand j'aurai un peu de temps

    bonne journée à tous

  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 boussafi Voir le message
    as tu vérifié la valeur du parametre d'intialisation UTL_FILE
    Ca serait une bonne chose de vérifier vos propositions (UTL_FILE n'existe pas en tant que paramètre, c'est UTL_FILE_DIR), mais aussi de les expliquer.
    Notre ami utilise la méthode avec DIRECTORY, qui est 100 % indépendante de UTL_FILE_DIR.

  8. #8
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    oui c'est bien UTL_FILE_DIR.
    DIRECTORY ne marche pas sans donner l'autorisation d'acces au disque via

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Non c'est complètement faux, il n'y a aucune allusion à UTL_FILE_DIR dans la documentation Oracle sur la commande CREATE DIRECTORY, notamment dans les prérequis :
    http://download.oracle.com/docs/cd/E...htm#SQLRF01207

  10. #10
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    UTL_FILE_DIR n'influe pas sur la creation de repertoire logique de Oracle mais la manipuilation de ce repertoire necessite

  11. #11
    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 boussafi Voir le message
    UTL_FILE_DIR n'influe pas sur la creation de repertoire logique de Oracle mais la manipuilation de ce repertoire necessite
    On attend juste que vous le prouviez

  12. #12
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut,

    Deux méthodes pour utiliser utl_file :
    La première consiste :
    1- créer les directory (MYDI_DATA, MYDIR_LOG et MYDIR_BIN) selon le besoin sur ton serveur de base de données utilisé.

    2- donner le grant read,write on directory to user;

    La deuxième :
    1- Utiliser UTL_FILE_DIR

    http://www.sc.ehu.es/siwebso/KZCC/Or...tparams223.htm

    La deuxième méthode parfois considérée comme un trou de sécurité (UTL_FILE_DIR).

    Cordialement Salim.

  13. #13
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Extrait de la note Metalink 206272.1, récupérée ici.
    NEW METHOD OF USING UTL_FILE PACKAGE IN 9.2 9iR2

    In the past(i.e. pre 9iR2), accessible directories for the UTL_FILE functions were specified in the initialization file using the UTL_FILE_DIR parameter.
    However, UTL_FILE_DIR access is not recommended in 9iR2. It is recommended that you use the CREATE DIRECTORY feature, which replaces UTL_FILE_DIR. Directory objects offer more flexibility and granular control to the UTL_FILE application administrator, can be maintained dynamically (that is, without shutting down the database), and are consistent with other Oracle tools.
    Traduction rapide :
    Une nouvelle façon d'utiliser le package UTL_FILE en 9iR2

    Dans le passé (pré 9iR2), les répertoires utilisables par les fonctions du package UTL_FILE étaient spécifiés dans le fichier d'initialisation via le paramètre UTL_FILE_DIR.
    Néanmoins, ce paramétrage n'est plus recommandé en 9iR2.
    Utilisez plutôt la fonctionnalité CREATE DIRECTORY, qui remplace UTL_FILE_DIRE.
    Les objets DIRECTORIES offrent plus de flexibilité et de finesse aux applications qui utilisent UTL_FILE, peuvent être maintenues dynamiquement (c'est à dire sans interruption de service de la base de données), et sont cohérents avec les autres outils Oracle.

Discussions similaires

  1. [Débutant] Exception system.invalid.operation exception levé
    Par sarrabnh dans le forum ASP.NET MVC
    Réponses: 1
    Dernier message: 09/05/2013, 16h04
  2. [Débutant] Invalid Operation Exception
    Par Shindaraa dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 14/08/2012, 14h37
  3. invalid Operation Exception
    Par petitours dans le forum C#
    Réponses: 7
    Dernier message: 27/10/2010, 14h38
  4. UTL_FILE: invalid file operation
    Par rvfranck dans le forum Administration
    Réponses: 3
    Dernier message: 23/03/2008, 21h46
  5. [JDBC]Invalid Operation : Type de ResultSet
    Par zizou771 dans le forum JDBC
    Réponses: 7
    Dernier message: 10/10/2005, 11h56

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