PL/SQL File to Blob

Share Button

Merhaba,

Bir dosyayı BINARY olarak veritabanına yazmak günümüz yazılım uygulamalarında önemli bir ihtiyaç olarak önümüze çıkmaktadır. Bu yazıda sistem üzerinde bulunan dosyayı BLOB bir tablo alanına yazma yönteminden bahsedeceğim. Oracle veritabanında LOB (Large Object) veri tipi BINARY olarak BLOB (Binary Large Object) ve karakter olarak CLOB (Character Large Object) tutulmaktadır. VARCHAR2 veri tipinin 4000 BYTE’ı aştığı durumlarda veriyi tabloda CLOB olarak tutmak çözüm sağlamaktadır. Aynı şekilde resim, doküman gibi karakter olmayan veri tiplerini de BINARY olarak tutmak için BLOB veri tipini kullanmalıyız.

BLOB veri tipi başka bir karakter veya BLOB veri tipinden doldurulabileceği gibi sistem üzerinde bulunan bir dosyadan da doldurulabilir.

Sistem üzerindeki bir dosyayı BLOB alana yazmak için aşağıdaki adımların pl/sql koduna dökülmesi gerekmektedir;

  1. Dosyanın tutulduğu dizinin karşılığına denk gelen DIRECTORY objesi Oracle veritabanında oluşturulur.
  2. Hedef BLOB ve kaynak BFILE değişkenleri tanımlanır.
  3. İlgili tabloya BLOB alanı boş olacak şekilde satır INSERT edilir.
  4. Tablodaki BLOB alan hedef değişkene aktarılır.
  5. BLOB ve BFILE LOB’ları açılır.
  6. BFILE kaynak değişkeni BLOB hedef değişkenine LOAD edilir.
  7. Kullanılan bütün LOB objeleri kapatılır.
  8. COMMIT çalıştırılır.

Öncelikle tablomuzu aşağıdaki SCRIPT’i kullanarak oluşturuyoruz;

Veritabanı üzerinde DIRECTORY oluşturuyoruz.
Not: Bu script sistemininizde olmayan dizinleri yaratmaz. DIRECTORY’nin anlamı sisteminizde bulunan bir dizinin Oracle Veritabanındaki karşılığıdır.

Hedef BLOB ve kaynak BFILE değişkenleri tanımlanır;

Tabloya empty_blob() içeren bir satır INSERT edilir. Bu noktada DML operasyonunda return into kullanılmıştır. return into DML operasyonundan hemen sonra ilgili alanı değişkene atar. Comment içine aldığım kısım ile aynı işlevi görür. Eğer Comment’li kısmı kullanacaksanız returning into cümlesini kaldırınız.

LOB objeleri DBMS_LOB yardımı ile OKUMA veya OKUMA_YAZMA modunda açılır.

LOB objeleri arası aktarım gerçekleştirilir.

Kullanılan LOB objeleri kapatılır ve COMMIT çalıştırılır.

Bütün Kod;