Читать «Язык PL/SQL» онлайн - страница 7
Иван Сергеевич Задворьев
Существенным отличием типов данных PL/SQL и Oracle SQL является б
для 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);
объединение в одну структуру нескольких параметров процедур и функций (вместо большого числа параметров скалярных типов удобнее передавать в процедуры и функции один параметр составного типа).
Компактность и расширяемость исходного кода – основное преимущество от использования записей PL/SQL. Сравните два варианта вызова процедуры печати сведений о человеке – с одним параметром-записью PL/SQL и с несколькими параметрами скалярных типов данных:
print(l_person) и print(l_name, l_secname, l_surname, l_born)
Первый вариант вызова выглядит более компактным. Кроме того, если появится необходимость обрабатывать новые сведения о человеке, например, ИНН и СНИЛС, то для второго варианта во все вызовы процедуры print по всему коду понадобится дописать по два новых параметра. Если же передавать описание человека в виде записи PL/SQL, то потребуется только добавить новые атрибуты в объявление типа t_person. Вносить изменения в заголовок функции print и в ее вызовы по исходному коду не потребуется. Тем самым с помощью использования записей PL/SQL обеспечивается расширяемость исходного кода.
Приведем основные правила работы с записями PL/SQL:
в определении атрибутов записей могут быть указаны ограничения NOT NULL и заданы значения атрибутов по умолчанию;
присвоение записи NULL присваивает NULL всем ее атрибутам;
чтобы сравнить две записи на равенство или неравенство нужно последовательно попарно сравнить значения всех атрибутов.