Московский государственный университет имени М.В.Ломоносова
Опубликован: 05.01.2004 | Доступ: свободный | Студентов: 9474 / 1246 | Оценка: 4.04 / 3.84 | Длительность: 10:03:00
ISBN: 978-5-94774-539-9
Лекция 11:

Основы языка PL/SQL

< Лекция 10 || Лекция 11: 1234 || Лекция 12 >

Типы данных

Язык PL/SQL поддерживает следующие категории типов:

  • встроенные типы данных, включая коллекции и записи;
  • объектные типы данных.

Встроенные типы данных

Встроенные типы данных

На рис. 11.1 приведен список встроенных типов PL/SQL.

Список встроенных типов PL/SQL

Рис. 11.1. Список встроенных типов PL/SQL

Скалярные типы описывают простые значения, не имеющие внутренних составляющих.

Составные типы описывают структуры, в которых имеются внутренние компоненты.

Ссылочные типы содержат значения. LOB типы содержат значения, называемые локаторами, которые определяют расположение больших объектов хранимых данных (например, графические файлы).

В следующей таблице приведено описание некоторых типов данных языка PL/SQL.

Синтаксис Диапазон значений
Числовые типы
BINARY_INTEGER PLS_INTEGER (целое со знаком) -2147483647 .. 2147483647. Тип PLS_INTEGER требует меньше памяти и обрабатывается быстрее, чем другие числовые типы
NUMBER[(precision,scale)] (с плавающей точкой) 1.0E-130 .. 9.99E125
NUMERIC (с фиксированной точкой) точность до 38 десятичных знаков
FLOAT (с плавающей точкой) точность до 38 десятичных знаков
REAL (с плавающей точкой) точность до 18 десятичных знаков
Символьные типы
CHAR[(maximum_length)] (для строк постоянной длины) LONG (для строк переменной длины) до 32767 байт Для столбца базы данных максимальный размер типа CHAR составляет 2000 байтов, а типа LONG - до 2 Гб
RAW(maximum_length) LONG RAW (для двоичных данных или строк байтов) до 32767 байт Для столбца базы данных типа RAW максимальный размер - 2000 байт.
VARCHAR2 (maximum_length) (для строк символов переменной длины) до 32767 байт

Все встроенные типы данных являются базовыми типами.

Любой базовый тип 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-типами содержит процедуры и функции, некоторые из которых приведены в следующей таблице.

Синтаксис Описание
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
GETLENGTH (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 pf1 FROM tbl1 FOR UPDATE;
   buf := 'Текст, который будет вставлен
   в объект LOB';
   DBMS_LOB.write (pf1, length(buf), 0, buf);
END;
< Лекция 10 || Лекция 11: 1234 || Лекция 12 >