LOB-типы используются для хранения больших объектов (Large Object). Стандарт SQL-99 ввел поддержку LOB-типов для расширенного уровня соответствия. Однако в Oracle реализован более полный набор LOB-типов.
В Oracle8е позволяется хранить данные LOB-типа до 4 Гбайт.
Типы LOB от типа Long отличаются, главным образом, тем, что при выборе значения любого LOB-типа посредством оператора SELECT возвращается указатель, а не само значение; кроме того, типы LOB могут быть и внешними.
Oracle поддерживает следующие четыре типа для больших объектов:
BFILE - для внешнего двоичного файла;
BLOB - для внутреннего двоичного объекта;
CLOB - для внутреннего символьного объекта;
NCLOB - для внутреннего символьного объекта, учитывающего национальный набор символов.
Любой объект LOB состоит из двух частей: данных и указателя на эти данные, называемого локатором.
Типы BLOB, CLOB или NCLOB могут использоваться как для столбца базы данных, так и для переменной PL/SQL.
Для загрузки объекта LOB предусмотрен пакет PL/SQL DBMS_LOB.
Пакет DBMS_LOB для работы с LOB-типами содержит процедуры и функции, некоторые из которых приведены в следующей таблице.
Синтаксис
Описание
APPEND (d1,d2)
Добавляет d2 к d1
COMPARE(d1,d2,n,pos1,pos2)
Сравнивает n байт значений d1 и d2
COPY (d,s,n,dp,sp)
Копирует n байт из d в s.
FILEOPEN (bdata,m)
Открывает объект типа BFILE в режиме, указанном параметром m
LOADFROMFILE (bdata1,data2,n,pos1,pos2)
Копирует n байт объекта типа BFILE bdata1 в любой объект LOB data2
GETLENGHT (data)
Возвращает длину указанного объекта LOB
READ (data,n,pos,buf)
Читает из объекта data n байт
WRITE (data,n,pos,buf)
Копирует из буфера buf n байт
EMPTY_CLOB () EMPTY_BLOB ()
Создают "пустой" объект указанного типа
Например:
DECLARE pf1 CLOB; pf2 BLOB; buf varchar2; BEGIN CREATE TABLE tbl1 ( f1 CLOB, f2 BLOB); INSERT INTO tbl1 VALUES (empty_clob(),empty_blob() ); SELECT f1 INTO ph1 FOR UPDATE; buf := 'Текст, который будет вставлен в объект LOB'; DBMS_LOB.write (pf1, lenght(buf), 0, buf); END;