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 :

Problème avec Utl_File.fcopy


Sujet :

Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 104
    Par défaut Problème avec Utl_File.fcopy
    Bonjour à tous et à toutes,

    j'ai utilsé la commande fcopy du package utl_file pour copier un fichier d'un répertoire à un autre : la commande copie bien le fichier à l'emplacement prévu mais lorsque je double clique sur le fichier ui a été copié j'ai un message de mémoire insuffisante et je n'arrivé à l'ouvir
    voici le bout des codes utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
               Utl_File.fgetattr('UTL_DOC',strfileName,blnexist,intfilelenght,blocsize);                    
               --copier des fichiers dans le repertoire de doc dest
               if blnexist then
                 Utl_File.fcopy(src_location => 'UTL_DOC',src_filename => strfileName,dest_location => 'UTL_DOC_DEST' ,dest_filename => strfileName);                     
               end if;

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Quel est le message d'erreur complet ? S'agit-il d'un message Windows ou Oracle ? Si l'ouverture du fichier se fait avec l'explorateur Windows, à priori, le problème ne vient pas d'Oracle (si le fichier a été correctement copié).

    Sous Windows , vous pouvez utilisez l'executable comp (en ligne de commande) pour vérifier que le fichier source a été correctement copié.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 104
    Par défaut
    Aprés la compraison entre les deux fichiers, j'ai trouvé qu'il y à une différence entre les deux fichiers ( le fichier que je voudrais le copie est du type rtf contenant une image) la commande fcopy n'arrive pas a copié l'image dans le fichier.
    y-à-t-il une possibilte de copier un fichier avec les fonctions dans le package dbms_lob?

    Merci d'avance

    Citation Envoyé par pifor
    Quel est le message d'erreur complet ? S'agit-il d'un message Windows ou Oracle ? Si l'ouverture du fichier se fait avec l'explorateur Windows, à priori, le problème ne vient pas d'Oracle (si le fichier a été correctement copié).

    Sous Windows , vous pouvez utilisez l'executable comp (en ligne de commande) pour vérifier que le fichier source a été correctement copié.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Il ne semble pas possible d'utiliser DBMS_LOB pour écrire dans des BFILE:

    DBMS_LOB can read and modify BLOBs, CLOBs, and NCLOBs; it provides read-only operations for BFILEs
    Si vous passez en 10g, UTL_FILE.FCOPY doit fonctionnre correctement avec les fichiers binaires

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 104
    Par défaut
    J'utilise oracle 9
    Citation Envoyé par pifor
    Il ne semble pas possible d'utiliser DBMS_LOB pour écrire dans des BFILE:



    Si vous passez en 10g, UTL_FILE.FCOPY doit fonctionnre correctement avec les fichiers binaires

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    La note Metalink 317338.1 propose un contournement à l'aide d'une procédure stockée qui réalise une copie binaire de fichiers avec UTL_FILE.GET_RAW/UTL_FILE.PUT_RAW (et UTL_FILE.FOPEN en mode binaire).

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 104
    Par défaut
    je n'ai pas pu acceder à metalink, pourriez vous me copier la procédure si vous avez l'accés.

    Merci d'avance

    Citation Envoyé par pifor
    La note Metalink 317338.1 propose un contournement à l'aide d'une procédure stockée qui réalise une copie binaire de fichiers avec UTL_FILE.GET_RAW/UTL_FILE.PUT_RAW (et UTL_FILE.FOPEN en mode binaire).

  8. #8
    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
    Par défaut
    Note Metalink 317338.1 :
    There is limited support for copying files provided with the UTL_FILE package.

    Before attempting the code, two Directory Alias need to be created. One for the location of the existing file and one for the location where the file is to be copied. Use the following SQL to create the two Directory Alias but do ensure to change the actual directory location.
    Once the directory Alias is created, the following SQL will copy the file using the Directory Alias created above.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> create DIRECTORY HOME AS '/home/oracle' -- CHANGE this to match your environment. 
    / 
    SQL> create DIRECTORY TARGET AS '/tmp'; -- CHANGE as needed 
     
    SQL> BEGIN UTL_FILE.FCOPY('HOME', 'myFile.txt', 'TARGET', 'myFileCopy.txt'); END;
    This above works for text files, but may introduce stray characters with binary files. As a result, the following code illustrates how to copy binary files.

    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
    create or replace procedure mycopy( src varchar2, src_name varchar2, dest varchar2 ,dest_name varchar2 ) is 
       fs UTL_FILE.FILE_TYPE ; 
       fd UTL_FILE.FILE_TYPE ; 
       tmp RAW(32000) ; 
    begin 
       fs := UTL_FILE.FOPEN(src, src_name , 'rb', 32000 ) ; 
       fd := UTL_FILE.FOPEN(dest, dest_name , 'wb', 32000 ) ; 
    begin 
       loop 
          utl_file.get_raw( fs, tmp, 32000 ); 
          utl_file.put_raw(fd, tmp, TRUE ); 
       end loop ; 
    EXCEPTION 
       when others then 
          utl_file.fclose(fs); 
          utl_file.fclose(fd); 
       end; 
    end;
    Use the following SQL to execute the above code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL> BEGIN MYCOPY( 'HOME' , 'Pic.jpg' , 'TARGET' , 'Pic2.jpg' ) ; END;
    Use with caution when copying large files, doing so may take away processing from the database.
    Attention elle est destinée PL/SQL - Version: 10.1.0.3.0. Vérifie que cela fonctionne en 9i

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 104
    Par défaut
    Dans 9i le mode d'ouverture des fichiers RB et WB est inconnu malhereusement
    j'ai le message ORA-29281 : mode invalide

    Citation Envoyé par plaineR
    Note Metalink 317338.1 :


    Attention elle est destinée PL/SQL - Version: 10.1.0.3.0. Vérifie que cela fonctionne en 9i

  10. #10
    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
    Par défaut
    Essaie de remplacer rb par r et wb par w (sans garantie du résultat)
    NB : les modes d'ouverture rb et wb sont apparus avec la 10g

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 104
    Par défaut
    Oui j'ai fait ce test, mais j'ai eu le problème de départ (il n'arrive à copier l'image dans le fichier source)
    c'est bizarre que dans oracle 9 n'y a pas une solution que remedier à ce problème.

    je suis bloqué!

    Citation Envoyé par plaineR
    Essaie de remplacer rb par r et wb par w (sans garantie du résultat)
    NB : les modes d'ouverture rb et wb sont apparus avec la 10g

  12. #12
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Avec Oracle 9, je ne vois pas d'autre solution pour exécuter cette copie depuis l'instance soit de la coder en Java soit d'utiliser une procédure externe qui peut être codée en C par exemple.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 104
    Par défaut
    Tu peux me donner quelques idées sur l'utilisation d'une fonction externe dans oracle

    Citation Envoyé par pifor
    Avec Oracle 9, je ne vois pas d'autre solution pour exécuter cette copie depuis l'instance soit de la coder en Java soit d'utiliser une procédure externe qui peut être codée en C par exemple.

  14. #14
    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
    Par défaut
    Citation Envoyé par pifor
    Avec Oracle 9, je ne vois pas d'autre solution pour exécuter cette copie depuis l'instance soit de la coder en Java soit d'utiliser une procédure externe qui peut être codée en C par exemple
    +1

    Procédure externe :
    http://www.developpez.net/forums/sho...93&postcount=6

    Java :
    http://www.developpez.net/forums/showthread.php?t=9960

  15. #15
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    En gros, le code C est compilé sans Oracle sous forme de shared library ou DLL et il faut configurer l'instance pour que Oracle puisse exécuter ce code:
    - créer un service Oracle Net
    - charger le code
    - publier le code C dans Oracle
    (ces opérations nécessitent les droits DBA).

    Voir le Application Developer's Guide - Fundamentals

Discussions similaires

  1. Problème avec UTL_FILE
    Par StringBuilder dans le forum PL/SQL
    Réponses: 4
    Dernier message: 13/07/2012, 09h07
  2. Problème avec UTL_FILE
    Par tawaha2010 dans le forum PL/SQL
    Réponses: 5
    Dernier message: 11/01/2011, 18h39
  3. Problème avec UTL_FILE
    Par kymior23 dans le forum PL/SQL
    Réponses: 13
    Dernier message: 12/06/2009, 10h44
  4. Probléme avec UTL_FILE.FOPEN
    Par elflamby dans le forum Oracle
    Réponses: 4
    Dernier message: 24/01/2006, 11h45
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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