LOB TYPES (BÜYÜK NESNE VERİ TİPLERİ)
LOB (Large Object) veritipi olan BFILE, BLOB, CLOB ve NCLOB, yapılandırılmamış (unstructured) veri bloklarının 4GB’a kadar verinin binary ya da karakter olarak saklanmasını ve işlenmesini sağlar (örneğin metin, grafik görüntüleri, video klipleri, ses vs. gibi).
• BFILE (Binary FILE)- (LOG)-( Bu alan türünde dosyalar oracle veritabnında değil external olarak belirtilen bir directory (dizinde ) saklanır ve sadece adresleri oracle da saklamak için kullanılan bir binary veri tipidir.)
• BLOB (Binary LOB)- (PICTURE)-( Yapısal olmayan ve 4 Gb ye kadar olan binary formattaki bilgileri saklamak için kullanılabilir, BLOB ‘lar RAW’a, RAW ‘lar da BLOB ‘a çevrilebilir.)
• CLOB (Character LOB)- (DOCUMENT)-( 4Gb kadar olan karakter katarlarını saklamak için kullanılabilecek alan türüdür, CLOB ‘lar CHAR ve VARCHAR2 ‘ye çevrilebilir, bunun tersi de geçerlidir.)
• NCLOB (National Character LOB)- (DOCUMENT)- )-( 4Gb kadar olan Unicode karakter katarlarını saklamak için kullanılabilecek alan türüdür.)
LOB’ lar üzerinde okuma, yazma işlemleri yapmak için DBMS_LOB paketi kullanılabilir.
SCALAR TYPES (SIRALI VERİ TİPLERİ)
• LONG (AMOUNT)-(LONG veri tipi ,diğer veritabanı yönetim sistemlerinde genellikle MEMO veri tipi olarak adlandırılır, LONG veritipi değişken uzunluklu karakter stringlerinin depolanmasında kullanılır ve uzunluğu 32760 byte ile sınırlıdır, bunun haricinde VARCHAR2 veritipine benzer.)
• LONG RAW (PICTURE)-( LONG RAW veritipi binary verilerin ve byte stringlerinin depolanmasında kullanılır, uzunluğu en fazla 32760 byte olabilir, LONG veritipine benzer, ondan farkı ise PL/SQL tarafından yorumlanmamasıdır.)
LONG verileri CLOB’ a, LONG RAW verileri ise BLOB’ a çevrilebilir.
LOB tipleri LONG ve LONG RAW tiplerinden şu şekilde farklıdır;
Bir LOB en fazla 4 GB, LONG ise 2 GB olabilir,
LOB ‘lar veriye rastgele erişir, LONG ‘lar ise veriye sıralı erişir.
BFILE ÖRNEĞİ
‘resim.bmp’ resim dosyasının kendisini değil de (database şişmemesi için) bulunduğu dizindeki adresini saklamak için;
Sql>conn hr/o
Sql>CREATE TABLE dokuman (id NUMBER,adi varchar2(50),yeri BFILE);
Sql>desc dokuman;
Sql>conn system/o
Sql> grant CREATE ANY DIRECTORY to hr;
Sql>conn hr/o
Sql>CREATE OR REPLACE DIRECTORY dizin as ‘D:\’;
Sql>insert into dokuman (id,adi,yeri) values (1,’deneme_resim’, BFILENAME(‘dizin’,’ resim.bmp’));
Sql>select * from dokuman; (sqlplus’ta gösterilmez)
Sql>update dokuman set yeri = BFILENAME(‘dizin’, ‘image3.gif’) where id = 1;
CLOB ÖRNEĞİ
‘deneme.xml’ dosyasının procedure yardımıyla oracle’daki ‘test_clob’ tablosuna aktarımı;
CREATE TABLE test_clob (id NUMBER(15),dosya_adi VARCHAR2(100),dosya CLOB);
CREATE OR REPLACE DIRECTORY DIR_CLOB AS ‘D:\\’;
CREATE OR REPLACE PROCEDURE PRO_CLOB
IS
dest_clob CLOB;
src_clob BFILE := BFILENAME(‘DIR_CLOB’, ‘deneme.xml’);
dst_offset number := 1 ;
src_offset number := 1 ;
lang_ctx number := DBMS_LOB.DEFAULT_LANG_CTX;
warning number;
BEGIN
DBMS_OUTPUT.ENABLE(100000);
INSERT INTO test_clob(id, dosya_adi,dosya)
VALUES(10, ‘deneme.xml’, empty_clob())
RETURNING dosya INTO dest_clob;
DBMS_LOB.OPEN(src_clob, DBMS_LOB.LOB_READONLY);
DBMS_LOB.LoadFromFile(
DEST_LOB => dest_clob
, SRC_LOB => src_clob
, AMOUNT => DBMS_LOB.GETLENGTH(src_clob)
);
DBMS_LOB.CLOSE(src_clob);
COMMIT;
DBMS_OUTPUT.PUT_LINE(‘ DBMS_LOB.LoadFromFile:(ID=10) ile dosya yüklendi’);
INSERT INTO test_clob(id, dosya_adi, dosya)
VALUES(20, ‘deneme.xml’, empty_clob())
RETURNING dosya INTO dest_clob;
DBMS_LOB.OPEN(src_clob, DBMS_LOB.LOB_READONLY);
DBMS_LOB.LoadCLOBFromFile(
DEST_LOB => dest_clob
, SRC_BFILE => src_clob
, AMOUNT => DBMS_LOB.GETLENGTH(src_clob)
, DEST_OFFSET => dst_offset
, SRC_OFFSET => src_offset
, BFILE_CSID => DBMS_LOB.DEFAULT_CSID
, LANG_CONTEXT => lang_ctx
, WARNING => warning
);
DBMS_LOB.CLOSE(src_clob);
COMMIT;
DBMS_OUTPUT.PUT_LINE(‘DBMS_LOB.LoadCLOBFromFile:(ID=20) ile dosya yüklendi’);
END;
/
SQL> set serveroutput on
SQL> exec pro_clob
SQL> SELECT id, DBMS_LOB.GETLENGTH(dosya) Length FROM test_clob;
SQL> set long 8000
SQL> set pagesize 9000
SQL> SELECT id, dosya FROM test_clob ORDER BY id;
LONG RAW ÖRNEĞİ
CREATE TABLE HR.PROGRAMLAR(DOSYA_ISMI VARCHAR2(30 BYTE),DERLEME_TARIHI DATE,PRG_DOSYA LONG RAW);
hr’ın bu programlar tablosuna örneğin toad’ı kullanarak programları yükleyebilir ve tablodan geri çekebiliriz.