Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour 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 03/03/2008, 08h19   #1
Invité de passage
 
Inscription : août 2004
Messages : 5
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 5
Points : 2
Points : 2
Par défaut CLOB vers Flat file UNIX

Bonjour,

Je voudrais envoyer un CLOB de plus de 32K dans un ficher TXT unix.
J'ai fais un essai avec UTL_FILE mais ca ne fonctionne pas (limitation 32k)

y a t'il une solution ?
Xantos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2008, 09h23   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
D'après la note 358641.1 de Metalink:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE OR REPLACE PROCEDURE clob_to_file (p_dir IN VARCHAR2, p_file IN VARCHAR2, p_clob IN CLOB) IS
l_output UTL_FILE.file_type;
l_amt NUMBER DEFAULT 32000;
l_offset NUMBER DEFAULT 1;
l_length NUMBER DEFAULT NVL (DBMS_LOB.getlength (p_clob), 0);
x varchar2(32760);
BEGIN
l_output := UTL_FILE.fopen (p_dir, p_file, 'w', 32760);
WHILE (l_offset < l_length) LOOP
dbms_lob.READ (p_clob, l_amt, l_offset, x);
UTL_FILE.put (l_output, x);
UTL_FILE.fflush (l_output);
UTL_FILE.new_line (l_output);
l_offset := l_offset + l_amt;
END LOOP;
 
UTL_FILE.fclose (l_output);
END clob_to_file;
/
Tous simplement une boucle pour écrire par paquet de 32000 caractères
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2008, 12h20   #3
Invité de passage
 
Inscription : août 2004
Messages : 5
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 5
Points : 2
Points : 2
Citation:
Envoyé par orafrance Voir le message
D'après la note 358641.1 de Metalink:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE OR REPLACE PROCEDURE clob_to_file (p_dir IN VARCHAR2, p_file IN VARCHAR2, p_clob IN CLOB) IS
l_output UTL_FILE.file_type;
l_amt NUMBER DEFAULT 32000;
l_offset NUMBER DEFAULT 1;
l_length NUMBER DEFAULT NVL (DBMS_LOB.getlength (p_clob), 0);
x varchar2(32760);
BEGIN
l_output := UTL_FILE.fopen (p_dir, p_file, 'w', 32760);
WHILE (l_offset < l_length) LOOP
dbms_lob.READ (p_clob, l_amt, l_offset, x);
UTL_FILE.put (l_output, x);
UTL_FILE.fflush (l_output);
UTL_FILE.new_line (l_output);
l_offset := l_offset + l_amt;
END LOOP;
 
UTL_FILE.fclose (l_output);
END clob_to_file;
/
Tous simplement une boucle pour écrire par paquet de 32000 caractères
Xantos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2008, 12h32   #4
Invité de passage
 
Inscription : août 2004
Messages : 5
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 5
Points : 2
Points : 2
Super sa fonctionne, grand merci
Xantos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2008, 13h23   #5
Membre confirmé
 
Avatar de DAB.cz
 
Inscription : octobre 2006
Messages : 221
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 221
Points : 214
Points : 214
Mais attention!!!

Aussi d'après la note 358641.1 de Metalink pour cette solution:
The total data is 84000, the output file is 84003. This shows there were 3 writes to a file and the 3 extra characters are due to the NEW_LINE command.

Pour 10g: http://www.developpez.net/forums/sho...d.php?t=424076

DAB
DAB.cz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h11.


 
 
 
 
Partenaires

Hébergement Web