Название | Язык PL/SQL |
---|---|
Автор произведения | Иван Сергеевич Задворьев |
Жанр | Базы данных |
Серия | |
Издательство | Базы данных |
Год выпуска | 2017 |
isbn |
Виды типов данных
Так как язык PL/SQL является процедурным расширением языка SQL, то в PL/SQL есть все типы данных, которые имеются в диалекте Oracle SQL с некоторыми несущественными различиями. В дополнение к ним в PL/SQL есть и такие типы данных, которых нет в Oracle SQL.
В PL/SQL имеются скалярные и составные типы данных:
данные скалярных типов состоят из одного неделимого (атомарного) значения (логические значения, числа, даты, строки);
данные составных типов состоят из нескольких значений (записи и коллекции).
Скалярные типы данных PL/SQL
Объявления типов данных PL/SQL находятся в пакете STANDARD, находящемся в схеме пользователя SYS:
package STANDARD AUTHID CURRENT_USER is
type BOOLEAN is (FALSE, TRUE);
type DATE is DATE_BASE;
type NUMBER is NUMBER_BASE;
subtype FLOAT is NUMBER; – NUMBER(126)
subtype REAL is FLOAT; – FLOAT(63)
subtype INTEGER is NUMBER(38,0);
subtype INT is INTEGER;
subtype DEC is DECIMAL;
…
subtype BINARY_INTEGER is INTEGER range '-2147483647'..2147483647;
subtype NATURAL is BINARY_INTEGER range 0..2147483647;
…
type VARCHAR2 is NEW CHAR_BASE;
subtype VARCHAR is VARCHAR2;
subtype STRING is VARCHAR2;
…
Видно, что объявленные в пакете STANDARD типы данных PL/SQL либо соответствуют типам данных Oracle SQL (_BASE-типы), либо вводятся как их подтипы (subtype).
Отметим наличие типа данных BOOLEAN, которого нет в Oracle SQL. Значения типа BOOLEAN можно, например, использовать в коде следующего вида:
l_amount_negative_flag BOOLEAN := amount<0;
IF l_amount_negative_flag THEN … END IF;
Существенным отличием типов данных PL/SQL и Oracle SQL является большая максимальная длина значений типов CHAR и VARCHAR2, предназначенных для представления строк фиксированной и переменной длины:
для VARCHAR2 в PL/SQL максимальная длина значений находится в диапазоне от 1 до 32 767 байт (в Oracle SQL до версии Oracle 12c максимальная длина VARCHAR2 была до 4000 байт, в Oracle 12c она была увеличена также до 32 767 байт);
для CHAR в PL/SQL максимальная длина значений находится в диапазоне от 1 до 32 767 байт (в Oracle SQL до версии Oracle 12c максимальная длина CHAR была до 2000 байт, в Oracle 12c она была увеличена также до 32 767 байт).
Записи PL/SQL
Записи PL/SQL относятся к составным типам данных и определяются как наборы атрибутов, связанных определенными отношениями. Атрибуты записи могут быть как скалярных типов данных, так и других составных типов – другими записями и коллекциями.
Запись PL/SQL объявляется как пользовательский тип данных с помощью ключевого слова RECORD, в целом работа с записями PL/SQL похожа на работу с записями в языке Pascal или структурами в языке C:
DECLARE
TYPE t_person IS RECORD
(name VARCHAR2 (100),
secname VARCHAR2 (100),
surname VARCHAR2 (100),
born DATE);
l_person t_person;
BEGIN
l_person.surname := 'Ильин';
l_person.name := 'Виктор';
l_person.secname := 'Семенович';
l_person.born := TO_DATE('07.08.1969','dd.mm.yyyy');
print(l_person);
END;
Назначение записей PL/SQL:
считывание в записи PL/SQL строк результирующих выборок SQL-запросов (при объявлении записей PL/SQL на основе таблиц и курсоров с помощью атрибута %ROWTYPE);
объединение в одну структуру нескольких параметров процедур и функций (вместо большого числа параметров скалярных типов удобнее передавать в процедуры и