PL-SQL BLOB ALANDAKI RESIM DATASINI JPG DOSYASINA DONÜŞTÜREN PROCEDUR (BLOB TO JPG)

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;