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

Oracle Discussion :

Package UTL.FILE


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 20
    Points : 11
    Points
    11
    Par défaut Package UTL.FILE
    Bonjour,

    J'utilse Oracle 10g et j'ai besoin de faire une fonction PL/SQL qui écrit dans un fichier. Malheuresement j'obtiens l'erreur suivante des l'ouverture du fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ERREUR :ORA-20100: ORA-29283: opération non valide sur le fichier
    ORA-06512: à "SYS.UTL_FILE", ligne 475
    ORA-29283: opération non valide sur le fichier [FICHIERS_OUT] -> fic.txt
    STATUS=-1 SQLERRM=ORA-20100: ORA-29283: opération non valide sur le fichier
    ORA-06512: à "SYS.UTL_FILE", ligne 475
    ORA-29283: opération non valide sur le fichier [FICHIERS_OUT] -> fic.txt 
    STATUS = -1
    SQLERRM = ORA-20100: ORA-29283: opération non valide sur le fichier
    ORA-06512: à "SYS.UTL_FILE", ligne 475
    ORA-29283: opération non valide sur le fichier [FICHIERS_OUT] -> fic.txt
    PL/SQL procedure successfully completed
    Avec le code :


    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    	FUNCTION enregTrans
    		(
    		p_VAR VARCHAR2	
    		)
    	RETURN PARAMETERS_VALUES_ARRAY
    	   AS
      	   	 v_data  PARAMETERS_VALUES_ARRAY := PARAMETERS_VALUES_ARRAY();
     
    		 Fic_out  VARCHAR2(128) := 'fic.txt';
    		 Dir_out  VARCHAR(30):= 'FICHIERS_OUT' ;
     
    		 FicOUT	UTL_FILE.FILE_TYPE ;
     		  -- Tampon de travail --  
      		  Ligne	VARCHAR2(32767) ;  
      		  -- Message --
      		  Msg    VARCHAR2(256) ;
      		  -- Exception --
      		  Fin    EXCEPTION ;
     
    	   BEGIN
    	     DECLARE
     
            BEGIN
    					inproc ('enregTrans(' ||  p_VAR  || ')' );
     
     
     
    					BEGIN
        					  FicOUT := UTL_FILE.FOPEN(Dir_out,Fic_out,'W',32764) ;
      					EXCEPTION
        						WHEN OTHERS THEN
    								Msg := SQLERRM || ' [' || Dir_out || '] -> ' || Fic_out;
    								RAISE Fin ;
      					END ;	
     
     
      					EXCEPTION
       						 WHEN Fin THEN
         					 UTL_FILE.FCLOSE_ALL ;
        					 RAISE_APPLICATION_ERROR( -20100, Msg ) ;
    					END ;
     
     
    					set_Parameters_Values(v_data,'STATUS', '0');
    					outproc (v_data) ;
              RETURN (v_data);
     
           EXCEPTION
    		   -- exception section
              WHEN OTHERS THEN
    							MyDebug ('ERREUR :' || SQLERRM);
    							set_Parameters_Values(v_data,'STATUS', '-1');
    							set_Parameters_Values(v_data,'SQLERRM', SQLERRM);
    							outproc (v_data) ;
       	  	      RETURN (v_data);
     
         END;

    En ayant auparavant fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CREATE DIRECTORY FICHIERS_OUT AS 'E:\documents' ;
    GRANT READ, WRITE ON DIRECTORY FICHIERS_OUT TO PUBLIC ;
    Merci pour votre aide ;-)

  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
    Points : 3 609
    Points
    3 609
    Par défaut
    Bonjour et bienvenu sur le forum

    Merci de lire les règles et de corriger votre post en conséquence en précisant notamment votre numéro de version d'oracle et en utilisant les balises code pour plus de lisibilité.

  3. #3
    Expert éminent sénior
    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
    Points : 19 075
    Points
    19 075
    Par défaut
    Merci de penser aux balises à l'avenir

    Merci également de ne pas utiliser le forum à des seules fins de déboggage et enfin merci de mettre tout le code lorsque vous présentez un problème

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Oups désolé...voila je pense avoir modifier ce qu'il fallait ;-)

  5. #5
    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
    Points : 3 609
    Points
    3 609
    Par défaut
    Ton répertoire e:\documents est-il visible depuis le serveur de la base de données ? Oracle a-t-il les droits en écritures dessus (droits OS) ? Ton disque e: est-il un disque mappé ?

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Ah désolé d'avoir créer un topic pour cet erreur stupide ! Mais n'y oracle était en fait monté sur une machine distante d'ou le problème ! Merci pour votre aide !

    Toujours concernant le package UTL_FILE, j'ai une autre question (peu-t etre bête elle aussi ms bon..) : Est-il possible d'utiliser la fonction FSEEK avec la 10g ? Car lorsque je la tape, elle ne se met pas en bleu et à l'éxécution cela me crée une erreur "ORA-29284: erreur de lecture du fichier" alors que les UTL_FILE.PUT fonctionnent bien eux.

    Merci encore

  7. #7
    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
    Points : 3 609
    Points
    3 609
    Par défaut
    As-tu lu le tuto de SheikYerbouti :
    http://sheikyerbouti.developpez.com/...?page=Chap8#L8

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Oui bien sur je l'ai lu et relu mais je ne trouve pas ou est mon erreur !

  9. #9
    Expert éminent sénior
    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
    Points : 19 075
    Points
    19 075
    Par défaut
    que donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    DECLARE
     
           Fic_out  VARCHAR2(128) := 'fic.txt';
           Dir_out  VARCHAR(30):= 'FICHIERS_OUT' ;
     
      FicOUT   UTL_FILE.FILE_TYPE ; 
     
    BEGIN
    FicOUT := UTL_FILE.FOPEN('FICHIERS_OUT',  'fic.txt', 'w');
    UTL_FILE.FCLOSE_ALL;
    END;
    /

  10. #10
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Merci mais en fait mon problème de repertoire est réglé ;-) (cf. ma réponse plus haut) et les 2 problèmes qu'il me reste sont :

    * l'erreur d'execution engendré par le FSEEK (cf. mon précédent post)

    * le fait que je n'arrive pas à écrire mes données à la suite dans le fichier , ie. à chaque fois que j'éxécute ma fonction, cela écrase mes données précédentes dans le fichier .txt alors que j'aimerais qu'elles s'écrivent à la suite les unes des autres... Ms je ne comprends pas bien les histores de pointeurs dans un fichier ...

  11. #11
    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
    Points : 3 609
    Points
    3 609
    Par défaut
    Pour le problème du fseek si tu ne mets pas ton code on risque d'avoir du mal à le deviner

    Pour l'autre problème, remplace 'w' par 'a'.
    'w' = écrit dans le fichier en l'écrasant
    'a' = écrit dans le fichier à la suite de ce qui existe déjà

  12. #12
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Ok merci plaineR pour le 'A' ;-) !

    Pour le FSEEk, mon code est le suivant (il est inséré dans le code de mon 1er post, après l'ouverture de mon fichier) :

    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
     
     
    BEGIN
     
    							 UTL_FILE.PUT(FicOUT,'001');
    							 UTL_FILE.PUT(FicOUT,TO_CHAR(SYSDATE,'YYYYMMDD'));
    							 UTL_FILE.PUT(FicOUT,'170000');
    							 UTL_FILE.PUT(FicOUT,'TOUT');
    							 UTL_FILE.FSEEK(FicOUT,NULL,29); 
    							 UTL_FILE.PUT(FicOUT,'TEST');
     
    							 UTL_FILE.FCLOSE( FicOUT );
     
      					EXCEPTION
         						 WHEN NO_DATA_FOUND THEN
     
    							 UTL_FILE.FCLOSE( FicOUT ) ;
      					END  ;

    Et l'erreur renvoyé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    ERREUR :ORA-29284: erreur de lecture du fichier
    STATUS=-1 SQLERRM=ORA-29284: erreur de lecture du fichier 
    STATUS = -1
    SQLERRM = ORA-29284: erreur de lecture du fichier
    En fait je voudrais juste laisser 29 'blancs' dans mon fichier entre le 'TOUT' et le 'TEST' mais utiliser le FSEEK n'est peut-etre pas la bonne solution...

  13. #13
    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
    Points : 3 609
    Points
    3 609
    Par défaut
    Pourquoi ne pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    v_ligne := '001' || TO_CHAR(SYSDATE,'YYYYMMDD') || '170000' || 
               'TOUT' || lpad (' ',27) || 'TEST';
    UTL_FILE.PUT(FicOUT, v_ligne);

  14. #14
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Cool merci beaucoup !!! Je sais que pour vous ca doit etre des trucs faciles mais quand on ne s'y connait pas c'est dur !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/05/2014, 15h39
  2. Package Latex File
    Par menakikou dans le forum Mise en forme
    Réponses: 3
    Dernier message: 13/08/2009, 11h53
  3. Flush auto d'un fichier avec UTL FILE
    Par tchoimars dans le forum SQL
    Réponses: 7
    Dernier message: 19/07/2007, 12h18
  4. Réponses: 6
    Dernier message: 03/10/2006, 22h49
  5. Probleme avec utl-file
    Par Scratch48 dans le forum Oracle
    Réponses: 25
    Dernier message: 12/04/2005, 18h39

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