Основы языка PL/SQL
Типы данных
Язык PL/SQL поддерживает следующие категории типов:
Встроенные типы данных
На рис. 11.1 приведен список встроенных типов PL/SQL.
Скалярные типы описывают простые значения, не имеющие внутренних составляющих.
Составные типы описывают структуры, в которых имеются внутренние компоненты.
Ссылочные типы содержат значения. LOB типы содержат значения, называемые локаторами, которые определяют расположение больших объектов хранимых данных (например, графические файлы).
В следующей таблице приведено описание некоторых типов данных языка PL/SQL.
Все встроенные типы данных являются базовыми типами.
Любой базовый тип PL/SQL определяется как набор значений и набор операций, выполнимых над этими значениями.
Язык PL/SQL позволяет определять новые подтипы как подмножество значений некоторого базового типа с тем же набором операций. Подтип не вводит никаких дополнительных операций над данными и не определяет никакого нового типа.
Определение подтипа может иметь следующее формальное описание:
SUBTYPE subtype_name IS base_type;
В пакете STANDARD базы данных Oracle, автоматически подключаемом для любого блока, определено несколько подтипов.
Пользователь может определить свой тип как некоторый подтип в секции объявлений блока, подпрограммы или пакете PL/SQL.
Например:
DECLARE SUBTYPE MyDate IS DATE; - Основан на типе DATE TYPE MyRec IS RECORD (time1 INTEGER, time2 INTEGER); SUBTYPE MyInterval IS MyRec; - Основан на типе RECORD SUBTYPE ID_N IS tbl1.f1%TYPE; - Основан на типе столбца
Типы, используемые как базовые, не могут содержать ограничений длины. Для создания пользовательского типа с ограничением длины предварительно объявляется переменная такого типа и уже на ее основе определяется пользовательский тип.
Например:
DECLARE var1 VARCHAR2(6); - Объявление переменной - с ограничением длины SUBTYPE string_6 IS var1%TYPE; - Объявление
LOB-типы
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-типами содержит процедуры и функции, некоторые из которых приведены в следующей таблице.
Например:
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 pf1 FROM tbl1 FOR UPDATE; buf := 'Текст, который будет вставлен в объект LOB'; DBMS_LOB.write (pf1, length(buf), 0, buf); END;