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 :

open fichier utl_file


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Par défaut open fichier utl_file
    Bonjour tout le monde,

    j'ai un problème avec la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i_fichier Utl_File.File_Type;
    i_fichier := Utl_File.fopen('FICHIERS_IN',file_name,'R');
    Tel que file_name := chemin complet + fichier.extension

    J'ai essayé de séparer la variable file_name en deux parties :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    repertoire := 'c:\document and settings\administrateur\bureau\import'
    file_name := 'toto.txt';
    i_fichier := Utl_File.fopen(repertoire, file_name, 'R');
    Dans les deux cas je fais des trace par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dbms_output.put_line('file_name' || file_name);
    i_fichier := Utl_File.fopen('FICHIERS_IN',file_name,'R');
    dbms_output.put_line('tototata' );
    Lorsque j'exécute la fonction il m'affiche que le contenu de file_name c'est-à-dire que j'ai un problème dans la fonction merci de me donne un coup de main

    Le message d'erreur :
    ORA-29280: chemin de répertoire non valide
    Alors que le répertoire existe bien dans le chemin
    c:\Documents and settings\administrateur\bureau\import

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bon.

    jouons au devinette...

    C'est votre message d'erreur complet?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ORA-29280: chemin de répertoire non valide
    ORA-06512: à "SYS.UTL_FILE", ligne 33
    ORA-06512: à "SYS.UTL_FILE", ligne 436
    ORA-06512: à "SYS.UTL_FILE_TEST_READ", ligne 8
    ORA-06512: à ligne 8
    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.
    On imagine que votre version de BD est 10g ou supérieur?

    Que faire?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Correct the directory object parameter, or create a corresponding directory object with the CREATE DIRECTORY command.
    Comment faire?
    http://www.adp-gmbh.ch/ora/sql/create_directory.html

  3. #3
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Par défaut
    Voila ma fonction :
    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
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    FUNCTION import_cles
      ( i_commande      IN COMMANDE_DISTRIBUTEUR.id_commande_dis%type,
        i_operateur     in operateur.id_operateur%type,
        i_distribut     in distributeur.id_distributeur%type,
        i_nonFichier    in varchar2)
     
      RETURN  integer   IS
     
     iCodeRet      integer;
     tracage       constantes.operation_tracing ;
     i_fichier     Utl_File.File_Type; -- Variable de la structure de fichier
     v_ligne       varchar2(1000);
     repertoire    varchar2(50);
     file_name     varchar2(50);
     i             integer;
     i_param       constantes.i_rec_param;
     retour integer;
     i_emplace        varchar2(50);
     rec_operation    constantes.rec_op;
     idImport         integer;
     rec_Operat       operateur%rowtype;
     i_status         integer;
     Etat_imp       importe.etat_import%type;
    BEGIN
        iCodeRet:=0;
        i:=1;
        iCodeRet:=PCKG_tools.get_idimport(idImport);
        if iCodeRet <0 then
            --Erreur extraction id demande
            iCodeRet:=constantes.C_err_Inconu;
            Etat_imp:='Erreur inconu';
            iCodeRet:=1;
            RETURN iCodeRet ;
        end if;
     
        rec_operation.rec_libele:= '[ ' || idImport|| '  ' || i_nonFichier || '  ' || To_char(sysdate, 'dd/mm/yyyy HH24:MI')||' ]';
        rec_operation.rec_date_op:=To_char(sysdate, 'dd/mm/yyyy HH24:MI:SS');
        iCodeRet:=pckg_requetes.insert_op_import(rec_operation,i_status);
        i_status:=0;
        dbms_output.put_line(' insert_op_importdddddddddddd =' || to_char(iCodeRet));
        if iCodeRet <0 then
            iCodeRet:=constantes.C_err_Inconu;
            iCodeRet:=1;
            Etat_imp:='Echec enregistrement des traces opération import ds importe';
            rollback;
            delete from tables_cles where id_import=idImport;
            iCodeRet:=pckg_requetes.up_etat_import(idImport,Etat_imp,constantes.St_Erreur);
            commit;
            RETURN -1 ;
        end if;
     
        iCodeRet :=PCKG_EJBS.valide_fichier(i_emplace,i_nonfichier);
        --dbms_output.put_line('valide_fichier  ==== ' || iCodeRet );
        if iCodeRet <> 0 then --Fichier invalide
            iCodeRet :=constantes.C_err_File_Inv;
            iCodeRet:=1;
            Etat_imp:='Echec opération validation du fichier deleteTempTable; import'; --V9.3.10
            rollback;
            delete from tables_cles where id_import=idImport;
            iCodeRet:=pckg_requetes.up_etat_import(idImport,Etat_imp,constantes.St_Erreur);
            commit;
             RETURN -1 ;
        end if;
        repertoire:=i_emplace;
        file_name:=i_nonFichier;
        dbms_output.put_line('file_name  ==== ' || file_name );
        dbms_output.put_line('repertoire  ==== ' || repertoire );
        i_fichier := Utl_File.fopen('FICHIERS_IN',file_name,'R');
                              --fopen (repertoire, file_name, 'R');
    /////blocke ici le dbms qui suit s affiche pas////////////////////////////
        dbms_output.put_line('open  ==== ' || file_name );
     
        if not Utl_File.is_open(i_fichier) then
       --dbms_output.put_line('eeerepertoire  ==== ' || to_char(sqlerrm) );
            iCodeRet :=constantes.C_err_OpenFile;
            iCodeRet:=21;
            Etat_imp:='Echec ouverture du fichier d import';--V9.3.10
            rollback;
            delete from tables_cles where id_import=idImport;
            iCodeRet:=pckg_requetes.up_etat_import(idImport,Etat_imp,constantes.St_Erreur);
            commit;
             RETURN -1 ;
        end if;
     
        loop
     
            --Utl_File.get_line(i_fichier,v_ligne);--lecture d une ligne du fichier
            retour:=lireLine(i_fichier,v_ligne);
             dbms_output.put_line('lireLine  ==== ' || retour );
            exit when retour <>0;
           i:=i+1;
           iCodeRet :=pckg_ejbs.insert_cles_temp(i,v_ligne,idImport);--insertion des lignes
     
             dbms_output.put_line('insert_cles_temp  ==== ' || iCodeRet );
            if iCodeRet < 0 then                             --dans la table cles_temp
                    iCodeRet:=constantes.C_err_Inconu;
                    iCodeRet:=1;
                    Etat_imp:='Insertion Temporaire';--V9.3.10
                    rollback;
                    delete from tables_cles where id_import=idImport;
                    iCodeRet:=pckg_requetes.up_etat_import(idImport,Etat_imp,constantes.St_Erreur);
                    commit;
                     RETURN -1 ;
            end if;
     
        end loop;
        Utl_File.Fclose (i_fichier);--fermeture du fichier
        --traiter les donnees inserrees dans la table cles_temp
        i_param.rec_param_Dist:=i_distribut;
        i_param.rec_param_Operat:=i_operateur;
        i_param.rec_param_Cmde:=i_commande;
        i_param.rec_param_Idimport:=idImport;
     
     
     
        --dbms_output.put_line('Avant  traite_data ==== ' || iCodeRet );
        iCodeRet :=PCKG_EJBS.traite_data(i_param);--recuperer les donnees de chaque
                                                  --ligne valider les donnees et les
                                                  --inserer dans la base de donnees
      --dbms_output.put_line('Apres traite_data ====  ' || iCodeRet );
       --dbms_output.put_line('Nombre de cles imporées  ==== [' || i||']' );
        if iCodeRet=constantes.C_err_Inconu then
           --dbms_output.put_line(' traite_data constantes.C_err_Inconu');
            rollback;
            iCodeRet:=1;
            --Etat_imp:='Insertion finale'; --V9.3.10
            --iCodeRet:=pckg_requetes.up_etat_import(idImport,Etat_imp);
             RETURN -1 ;
        elsif iCodeRet= constantes.C_err_NoData then
           --dbms_output.put_line(' traite_data constantes.C_err_NoData');
            rollback;
            iCodeRet:=1;
            --Etat_imp:='Echec récuperation des données gencode ';
            --iCodeRet:=pckg_requetes.up_etat_import(idImport,Etat_imp);
             RETURN -1 ;
        end if;
     
        --VGN21.1
        iCodeRet:=PCKG_DIMPORT.enregistrer_dimport(idImport);
        dbms_output.put_line('enregistrer_dimport  ==== ' || iCodeRet );
        if iCodeRet<0 then
           --dbms_output.put_line(' enregistrer_dimport constantes.C_err_Inconu');
            rollback;
            iCodeRet:=1;
             RETURN -1 ;
        end if;
     
        iCodeRet:=0;
        Etat_imp:='Succes import des cles dans la base';
        iCodeRet:=pckg_requetes.up_etat_import(idImport,Etat_imp,constantes.St_Non_valide);
        dbms_output.put_line('up_etat_import  ==== ' || iCodeRet );
        RETURN iCodeRet ;
     
    EXCEPTION
        WHEN others THEN
     
           --dbms_output.put_line('code' || to_char(sqlcode));
           --dbms_output.put_line('code' || to_char(sqlerrm));
            iCodeRet:=1;
            tracage.package_name:='PCKG_ejbs';
            tracage.function_name:='import_cles';
            tracage.Err_Code:=  to_char(sqlcode);
            tracage.Err_Desc:=  to_char(sqlerrm);
            tracage.Code_Ret:=iCodeRet;
            pckg_tools.laisserTrace(tracage,0);
            Utl_File.Fclose (i_fichier);--fermeture du fichier
            Etat_imp:='Erreur :' || to_char(sqlcode) || to_char(sqlerrm);
            delete from tables_cles where id_import=idImport;
            commit;
            iCodeRet:=pckg_requetes.up_etat_import(idImport,Etat_imp,constantes.St_Erreur);
            RETURN -1;
    END;
    /
    Le message qu'il m'affiche :
    code -29280
    codeORA-29280;chemin de répertoire non valide
    ora-29280:chemin de repertoire non valide
    UP_ETAT_IMPORT-6503
    UP_ETAT_IMPORTORA-06503 L/SQL:la fonction ne raméne aucune valeur
    Merci.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Que ramène cette requête?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from all_directories where directory_name = 'FICHIERS_IN'

  5. #5
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 35
    Par défaut
    Bonjour,

    cette requête ne me ramène aucune ligne.

    Est-ce que vous pouvez m'expliquer ce que fait la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create directory as fichier 'C:\toto'
    Est-ce qu'elle permet de créer le répertoire ?

    Merci.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par bourbah Voir le message
    cette requête ne me ramène aucune ligne.
    Bon ben voila pourquoi ça ne marche pas, vous n'avez pas créé le oracle directory.

    Citation Envoyé par bourbah Voir le message
    Est-ce que vous pouvez m'expliquer ce que fait la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create directory as fichier 'C:\toto'
    Est-ce qu'elle permet de créer le répertoire ?
    http://www.orafaq.com/wiki/Oracle_directory

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

Discussions similaires

  1. Open fichier et split
    Par bm dans le forum Général Python
    Réponses: 6
    Dernier message: 28/04/2015, 20h24
  2. fopen et open;fichiers bufférisés.
    Par yessine66 dans le forum Débuter
    Réponses: 7
    Dernier message: 11/11/2010, 12h08
  3. Open fichier texte et permission refusée
    Par ptinavir dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/10/2010, 17h08
  4. Word open fichiers corrompus
    Par PSA78 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 21/09/2010, 23h50
  5. Le fichier UTL_FILE reste ouvert par Oracle
    Par tomlev dans le forum Oracle
    Réponses: 5
    Dernier message: 04/04/2008, 20h41

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