Prb taille fichier image BLOB
Bonjour,
J'ai stocké une image dans ma base, et je voudrais régénérer un fichier à partir de mon BLOB. J'ai fais une procedure en m'inspirant du code sur ce site La procedure s'execute sans bug mais le problème c'est que le fichier qui est généré est corompu. Apparemment, il a la même taille que le fichier d'origine mais je peux pas l'ouvrir pour le visualiser.
Je vous met ma procédure ci dessous. Voilà, si quelqu'un peut m'aider, ça serait bien sympa.
Merci.
PS : Je travail avec Oracle Express 10G. Sais pas si ça peut servir.
Code:
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; |