Атрибуты. Переменные и константы в PL/SQL имеют атрибуты – свойства, которые позволяют ссылаться на тип данных и структуру объекта
Переменные и константы в PL/SQL имеют атрибуты – свойства, которые позволяют ссылаться на тип данных и структуру объекта, не повторяя его определение. Таблицы и столбцы в базе данных имеют аналогичные атрибуты, которые можно использовать для того, чтобы облегчить сопровождение. Атрибут %TYPE представляет тип данных переменной, константы или столбца базы данных. Это, в частности, полезно при объявлении переменной, которая ссылается на столбец базы данных. Предположим, например, что в таблице с именем books есть столбец с именем title. Чтобы объявить переменную с именем my_title, принадлежащую к тому же типу, что и столбец title, вы используете точечную нотацию и атрибут %TYPE следующим образом:
my_title books.title%TYPE
Объявление ту_title с помощью %TYPE имеет два преимущества. Первое – не нужно знать точный тип данных title. Второе – если в базе данных меняется определение title (например, увеличивается размер строки символов), то соответственно изменится и тип данных тy_title при выполнении программы. В PL/SQL записи используются для объединения данных в группы. Запись состоит из ряда полей, в которые могут заноситься значения данных. При помощи атрибута %ROWTYPE можно получить тип записи, которая будет представлять строку таблицы. Запись может содержать целиком строку данных, выбранную из таблицы или извлеченную с помощью курсора (обсуждается позднее). Столбцы строки и соответствующие поля записи имеют одинаковые имена и типы данных. В примере, приведенном ниже, объявляется запись с именем dept_rec. Ее поля имеют те же имена и типы данных, что и столбцы таблицы dept.
DECLARE dept_rec dept%ROWTYPE; ...
Для доступа к полям записи можно использовать точечную нотацию, как показывает следующий пример:
my_deptno: = dept_rec.deptno;
Если объявлен курсор для выборки фамилии, оклада, даты поступления и должности служащих, то можно использовать %ROWTYPE для объявления записи, которая будет содержать ту же информацию, следующим образом:
DECLARE CURSOR c1 IS SELECT ename, sal, hiredate, job FROM emp; emp_rec c1%ROWTYPE;
Когда выполняется оператор FETCH cl INTO emp_rec; значение столбца ename таблицы етр присваивается полю ename записи emp_rec, значение столбца sal присваивается полю sal и т.д. Ниже показан возможный результат (табл. 3.1). Таблица 3.1 Пример заполнения таблицы
|