Объявление типа для переменной с таблица.столбец %TYPE
Данный скрипт представлен в книге - "Oracle PL/SQL для профессионалов":
PROCEDURE explain_joke (main_category_in IN joke_category.category_id%TYPE)
IS
/*
|| Курсор со списком параметров, состоящим
|| из единственного строкового параметра.
*/
CURSOR joke_cur (category_in IN VARCHAR2)
IS
SELECT name, category, last_used_date
FROM joke
WHERE category = UPPER (category_in);
joke_rec joke_cur%ROWTYPE;
BEGIN
/* Теперь при открытии курсора ему передается аргумент */
OPEN joke_cur (main_category_in)
Объясните, пожалуйста, почему при объявлении типа для параметра в процедуре explain_joke указывается таблица.столбец (joke_category.category_id).
Это ошибка или такой вариант объявления переменной разрешен?
Ответы (1 шт):
Это не ошибка. Атрибут %TYPE является частью синтаксиса PL/SQL.
Он позволяет объявить константу, переменную, или параметр подпрограммы с тем же типом данных, что и ранее объявленная переменная или столбец таблицы, не зная точно, что это за тип данных.
Если меняется объявление ссылаемого элемента, то соответственно меняется и объявление ссылающегося элемента.
Например:
declare
val varchar2 (8);
ref val%type := 'abcdef';
begin null;
end;
/
PL/SQL procedure successfully completed.
А если так:
declare
val varchar2 (4);
ref val%type := 'abcdef';
begin null;
end;
/
ORA-06502: PL/SQL: numeric or value error: character string buffer too small