Prosedur üç tane parametre alıyor, Birincisi resim datası olan blob data, ikincisi daha önce veritabanında oluşturduğumuz DIRCTORY, bu directory nin gösterdiği yere jpg dosyalarımız yazılacak, birde jpg dosyayı hangi isimle yazacağını ayarladığımız filename parametresini alıyor.
CREATE OR REPLACE PROCEDURE JDBA.blob_to_file (p_blob IN OUT NOCOPY BLOB,
p_dir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
l_file UTL_FILE.FILE_TYPE;
l_buffer RAW(32767);
l_amount BINARY_INTEGER :=32767;
l_pos INTEGER:=1;
l_blob_len INTEGER;
BEGIN
l_blob_len :=dbms_lob.getlength(p_blob);
-- hedef dosyayı aç
l_file:=UTL_FILE.fopen(p_dir,p_filename,'wb',32767);
WHILE l_pos <= l_blob_len
LOOP
DBMS_LOB.read(p_blob,l_amount,l_pos,l_buffer);
UTL_FILE.put_raw(l_file,l_buffer,TRUE);
l_pos :=l_pos+l_amount;
END LOOP;
UTL_FILE.fclose(l_file);
EXCEPTION
WHEN OTHERS THEN
IF UTL_FILE.is_open(l_file) THEN
UTL_FILE.fclose(l_file);
END IF;
RAISE;
END blob_to_file;
/
Bu prosedruru çağırırken blob alanı bir değişkene atayarak o değişkeni prosedure parametre olarak göndermemiz gerekmektedir. Aşağıda kullanımına dağir bir örnek kod verilmiştir.
declare
l_blob BLOB;
begin
select RESIM into l_blob
from MEDIA.RESIM
where ID=1 ;
blob_to_file(p_blob => l_blob,
p_dir => 'EXP_IMP_DIR',
p_filename => 'ornek_resim.jpg');
end;
Bir yanıt yazın