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 31 32 33 34 35 36 37 38 39 40 41 42 43
| create or replace PROCEDURE write_blob IS
v_file utl_file.file_type;
v_repertoire VARCHAR2(512) := 'TEMP';
v_fichier VARCHAR2(256) := 'heaven2C.JPG';
v_buffer RAW(32000);
v_offset PLS_INTEGER DEFAULT 1;
v_taille PLS_INTEGER;
v_longueur PLS_INTEGER;
v_chunk PLS_INTEGER;
v_blob BLOB;
BEGIN
SELECT image INTO v_blob FROM MES_PHOTOS WHERE id = 1;
dbms_lob.OPEN(v_blob, dbms_lob.lob_readonly);
v_chunk := dbms_lob.getchunksize(v_blob);
v_longueur := dbms_lob.getlength(v_blob);
dbms_output.put_line (v_longueur);
DBMS_OUTPUT.ENABLE(100000);
v_file := utl_file.fopen(v_repertoire, v_fichier, 'w', 32767);
WHILE v_offset < v_longueur
LOOP
dbms_output.put_line ('///////////');
IF v_longueur - (v_offset - 1) > v_chunk THEN
v_taille := v_chunk;
ELSE
v_taille := v_longueur - (v_offset - 1);
END IF;
v_buffer := NULL;
dbms_lob.READ(v_blob, v_taille, v_offset, v_buffer);
utl_file.put(file => v_file, buffer => utl_raw.cast_to_varchar2(v_buffer));
utl_file.fflush(file => v_file);
v_offset := v_offset + v_taille;
END LOOP;
dbms_lob.CLOSE(v_blob);
utl_file.fclose(v_file);
EXCEPTION WHEN OTHERS THEN
IF dbms_lob.ISOPEN(v_blob) = 1 THEN
dbms_lob.CLOSE(v_blob);
END IF;
IF utl_file.is_open(file => v_file) THEN
utl_file.fclose(file => v_file);
END IF;
END; |
Partager