Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/08/2007, 08h52   #1
Invité régulier
 
Inscription : juillet 2006
Messages : 104
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 104
Points : 9
Points : 9
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 :
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;
FABFAB125 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2007, 11h33   #2
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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é.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2007, 12h19   #3
Invité régulier
 
Inscription : juillet 2006
Messages : 104
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 104
Points : 9
Points : 9
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é.
FABFAB125 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2007, 17h12   #4
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Il ne semble pas possible d'utiliser DBMS_LOB pour écrire dans des BFILE:

Citation:
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
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 08h10   #5
Invité régulier
 
Inscription : juillet 2006
Messages : 104
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 104
Points : 9
Points : 9
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
FABFAB125 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 08h38   #6
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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).
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 10h12   #7
Invité régulier
 
Inscription : juillet 2006
Messages : 104
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 104
Points : 9
Points : 9
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).
FABFAB125 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 10h24   #8
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
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 866
Points : 3 448
Points : 3 448
Note Metalink 317338.1 :
Citation:
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 :
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 :
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 :
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
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 10h42   #9
Invité régulier
 
Inscription : juillet 2006
Messages : 104
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 104
Points : 9
Points : 9
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
FABFAB125 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 11h00   #10
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
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 866
Points : 3 448
Points : 3 448
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
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 11h19   #11
Invité régulier
 
Inscription : juillet 2006
Messages : 104
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 104
Points : 9
Points : 9
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
FABFAB125 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 11h45   #12
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 11h47   #13
Invité régulier
 
Inscription : juillet 2006
Messages : 104
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 104
Points : 9
Points : 9
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.
FABFAB125 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 11h55   #14
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
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 866
Points : 3 448
Points : 3 448
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/d9960/bases-donnees/oracle/lancement-shell-unix-proc-stockee/
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 11h57   #15
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h31.


 
 
 
 
Partenaires

Hébergement Web