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 ?![]()
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 ?![]()
D'après la note 358641.1 de Metalink:
Tous simplement une boucle pour écrire par paquet de 32000 caractères
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 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; /![]()
Super sa fonctionne, grand merci![]()
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
Partager