- •Язык pl/sql
- •Блоки программы pl/sql
- •Основы программирования на языке pl/sql
- •Переменные программы
- •Управление ходом выполнения программы
- •Взаимодействие с базами данных
- •Объявление и использование подпрограмм: процедуры и функции
- •Работа с переменными типа запись
- •Атрибуты %type и %rowtype
- •Работа с курсорами
- •Встроенные пакеты утилит
- •Триггеры баз данных
- •Упражнение 4.21. Создание и использование триггеров базы данных
Работа с переменными типа запись
До сих пор в объявлениях описывались простые скалярные переменные и константы, основанные на типах данных Oracle (NUMBER), и подтипы базовых типов (INTEGER). В блоке программы PL/SQL могут быть объявлены определенные пользователем типы, после чего они могут использоваться в программе.
Рассмотрим объявление и использование простого определенного пользователем типа, которым является запись. Тип запись включает в себя одно или несколько связанных полей, каждое из которых имеет свое имя и тип.
Программы PL/SQL используют тип запись для создания переменных, отвечающих структуре записи в таблице. Пользователь может объявить тип запись с именем bookRecord и использовать его для создания переменной типа запись, в которой содержатся поля book_ID, b_name, b_author, b_year, b_price, b_count и b_cat_ID. После объявления переменной типа запись можно работать с отдельными полями записи или передать всю запись в подпрограмму как одно целое.
Рассмотрим анонимный блок PL/SQL, иллюстрирующий объявление и использование типа запись. В разделе объявлений блока объявляется определяемый пользователем тип, соответствующий атрибутам таблицы Catalogs, а затем объявляются две переменные типа запись, использующие этот новый тип. Выполняются следующие действия:
делается ссылка на индивидуальные поля переменной типа запись, с использованием точечной нотации;
присваиваются значения полям переменной типа запись;
переменная типа запись передается в качестве параметра при вызове процедуры;
копируются значения полей одной записи в другую запись того же типа;
поля переменной типа запись используются в качестве выражений в команде INSERT.
Атрибуты %type и %rowtype
Эти атрибуты используются в программе для объявления переменных, констант, отдельных полей в записях и в переменных типа запись, соответствующих по свойствам полям базы данных и таблиц или других программных конструкций. Использование этих атрибутов упрощает объявление программных конструкций и делает программы более гибкими по отношению к изменениям в базах данных. Например, при изменении администратором таблицы Catalogs и добавления в нее нового поля переменная типа запись, объявленная с использованием атрибута типа %ROWTYPE, автоматически подстраивается в процессе выполнения программы к новому полю без изменения программы.
Атрибут %TYPE используется при объявлении переменной, константы или поля в переменной типа запись для перехвата во время выполнения программы типа данных другой программной конструкции или поля в таблице базы данных. Рассмотрим анонимный блок, использующий атрибут %TYPE для ссылки на поля таблицы Catalogs при объявлении типа catalogRecord.
В программе PL/SQL может использоваться атрибут %ROWTYPE, позволяющий объявлять переменные типа запись и другие объекты динамически, во время выполнения программы. Рассмотрим анонимный блок, иллюстрирующий использование атрибута %ROWTYPE для упрощения объявления переменной типа запись, соответствующей полям таблицы Catalogs.
Переменная типа запись, которая объявляется с помощью атрибута %ROWTYPE, автоматически получает для своих полей имена, соответствующие полям таблицы, на которую выполняется ссылка.
Преимущество атрибутов %TYPE и %ROWTYPE в том, что они делают объявления программы гибкими в отношении неизбежных изменений структуры данных. Программы в предыдущих примерах корректно работают при объявлении поля cat_name таблицы Catalogs как принадлежащегок любому из типов VARCHAR2(1), VARCHAR2(50), VARCHAR2(250) и т. д.