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
|
procedure to_file(dir in varchar2, file in varchar2, lob in blob) is
output_file utl_file.file_type;
chunk_size constant pls_integer := 4096;
buf raw (4096); -- Must be equal to chunk_size
written_sofar pls_integer := 0; --(avoid PLS-00491: numeric literal required)
bytes_to_write pls_integer;
lob_len pls_integer;
begin
lob_len := dbms_lob.getlength(lob);
output_file := utl_file.fopen(dir, file, 'WB');
while written_sofar + chunk_size < lob_len loop
bytes_to_write := chunk_size;
dbms_lob.read(lob,bytes_to_write,written_sofar+1,buf);
utl_file.put_raw(output_file,buf);
written_sofar := written_sofar + chunk_size;
end loop;
bytes_to_write := lob_len-written_sofar;
dbms_lob.read(lob,bytes_to_write,written_sofar+1,buf);
utl_file.put_raw(output_file,buf);
utl_file.fclose(output_file);
end to_file; |
Partager