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

SQL Oracle Discussion :

UTL_FILE : problème d'écriture du fichier


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 75
    Points : 48
    Points
    48
    Par défaut UTL_FILE : problème d'écriture du fichier
    Bonjour,
    J'ai un script shell sous unix qui doit extraire des données d'une table Oracle et les écrires dans un fichier sous unix.
    J'utilise donc pour cela le sqlplus, pl/sql et le package UTL_FILE.
    Voici mon 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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    [...]
    ag_num=027
    var_rep="/tmp"
    var_fic="win_ana_ag"
     
    sqlplus -s $USER_ORACLE_APPLI/$PWD_ORACLE_APPLI@$BASE_ORACLE_APPLI <<EOF
     
    WHENEVER OSERROR  EXIT 100
    WHENEVER SQLERROR EXIT 101
     
    SET SERVEROUTPUT ON SIZE 1000000
     
    PROMPT --------Appel fonction pl/sql---------------
     
    DECLARE
     
      c_repertoire         VARCHAR2(30);
      c_fichier            VARCHAR2(30);
      v_enr                VARCHAR2(500);
      v_fichier            UTL_FILE.FILE_TYPE;
      o_errn               NUMBER(12);
      o_errm               VARCHAR2(255);
      i number(10);
     
    	/* declaration du curseur */
    	CURSOR C_PART (p_ag_num IN NUMBER) IS
    	select distinct cpt_num as Compte,
    				 cpt_exp_nom as Nom,
    				 le_partenaire as IDF,
    				 le_login_tvw as LoginTVW
    	from  histo_liaison_edi@TO_CODP.WORLD
    	where AG_NUM_COMMERC = p_ag_num
    		 /* exclure les agences Domino*/
    		 and le_partenaire not like 'DA%FR%CK%'
    		 and le_dat_integration is not null
    	;
     
    	/* declaration des variables*/
    	v_Compte VARCHAR2(9);
    	v_Nom VARCHAR2(30);
    	v_IDF VARCHAR2(15);
    	v_LoginTVW VARCHAR2(15);
     
     
    /* debut traitement*/
    BEGIN
      c_repertoire := '$var_rep';
      c_fichier := '$var_fic';
      v_fichier := utl_file.fopen(c_repertoire, c_fichier, 'w');
      If not UTL_FILE.IS_OPEN( v_fichier ) Then
      	RAISE_APPLICATION_ERROR( -20100, 'Erreur ouverture du fichier ' ) ;
      End if ;
     
     
      i := 0;
     
    		 Open C_PART( '$ag_num' ) ; /* ouverture du curseur avec passage du code agence en parametre */
    		 Loop
    		    i := i+1;
    		 		Fetch C_PART Into v_Compte, v_Nom, v_IDF, v_LoginTVW ;
            Exit When C_PART%NOTFOUND ; /*sortie lorsque le curseur ne ramene plus de ligne*/
    				v_enr := v_Compte || ';' || v_Nom || ';' || v_IDF || ';' || v_LoginTVW ;
    				dbms_output.put_line(i);
    				dbms_output.put_line(v_enr);
    				utl_file.put_line(v_fichier, v_enr);
    		 End loop ;
    		 Close C_PART ; /*fermeture du curseur*/
    		 utl_file.fclose(v_fichier);
    EXCEPTION
      WHEN NO_DATA_FOUND THEN NULL;
      When UTL_FILE.INVALID_PATH Then
      	o_errm := c_repertoire || c_fichier || ' : ' || 'File location is invalid.';
      	RAISE_APPLICATION_ERROR( -20070, o_errm ) ;
      When UTL_FILE.INVALID_MODE Then
      	o_errm := c_repertoire || c_fichier || ' : ' || 'The open_mode parameter in FOPEN is invalid.';
      	RAISE_APPLICATION_ERROR( -20070, o_errm ) ;
      When UTL_FILE.INVALID_FILEHANDLE Then
      	o_errm := c_repertoire || c_fichier || ' : ' || 'File handle is invalid.';
      	RAISE_APPLICATION_ERROR( -20070, o_errm ) ;
      When UTL_FILE.INVALID_OPERATION	Then
      	o_errm := c_repertoire || c_fichier || ' : ' || 'File could not be opened or operated on as requested.';
      	RAISE_APPLICATION_ERROR( -20070, o_errm ) ;
      When UTL_FILE.READ_ERROR	Then
      	o_errm := c_repertoire || c_fichier || ' : ' || 'Operating system error occurred during the read operation.';
      	RAISE_APPLICATION_ERROR( -20070, o_errm ) ;
      When UTL_FILE.WRITE_ERROR Then
      	o_errm := c_repertoire || c_fichier || ' : ' || 'Operating system error occurred during the write operation.';
      	RAISE_APPLICATION_ERROR( -20070, o_errm ) ;
      When UTL_FILE.INTERNAL_ERROR then
      	o_errm := c_repertoire || c_fichier || ' : ' || 'Unspecified PL/SQL error';
      	RAISE_APPLICATION_ERROR( -20070, o_errm ) ;
      WHEN OTHERS THEN
         o_errn := SQLCODE;
         o_errm := SQLERRM;
         DBMS_OUTPUT.PUT_LINE('ERREUR pendant le traitement, No :' || o_errn);
         DBMS_OUTPUT.PUT_LINE('Description : '|| o_errm);
         utl_file.fclose(v_fichier);
         RAISE;
    END ;
    /
    EXIT
    EOF
    L'extraction des données se passe bien et le traitement se déroule sans aucune erreur. Le problème c'est que le fichier n'est pas créé.
    L'option utl_file_dir d'oracle est égale à /tmp .

    Quelqu'un a t'il une idée car là je sèche complètement depuis un bon moment ...

  2. #2
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Bonjour,

    2 questions :
    - Quelle version d'oracle utilises tu ?
    - As tu une erreur lorsque tu execute la fonction sous sqlplus et que tu fait un show error ?
    It isn't that they can't see the solution, it's that they can't see the problem.
    Mes Articles et Traductions (Microstrategy, Css et Javascript)
    Si vous souhaitez contribuer à la rubrique BI, contactez-moi ou tout autre membre de l'équipe BI par MP.

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    version Oracle = Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production

    show error = Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    désolé, pour le show error ==> No errors

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/05/2010, 14h58
  2. Problème d'écriture de fichier sous Oracle
    Par guicecal dans le forum Administration
    Réponses: 4
    Dernier message: 26/10/2009, 10h38
  3. Problème d'écriture de fichier
    Par david71 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 21/07/2009, 11h06
  4. Problème d'écriture vers fichier binaire
    Par Mr Light dans le forum C++
    Réponses: 6
    Dernier message: 27/02/2008, 21h25
  5. Réponses: 5
    Dernier message: 04/12/2006, 17h40

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