В блоке программы PL/SQL можно объявлять конструкции различных типов:
• переменные и константы;
• подтипы, определяемые пользователями;
• составные типы, определяемые пользователями, в том числе записи, вложенные таблицы, изменяемые массивы;
• курсоры и курсорные переменные;
В последующих параграфах вкратце поясняется, как их объявлять в программе PL/SQL.
В разделе объявлений программы PL/SQL могут содержаться объявления переменных и именованных констант. Переменные и константы могут иметь любой тип данных ORACLE. Например, в следующем фрагменте программы переменная и константа объявляются при помощи ANSI-типа данных INTEGER (целое число):
declare
id integer;
standard constant integer := 500;
Скалярные типы данных PL/SQL и связанные с ними подтипы приведены в таблице 2. Когда в программе объявляется переменная, то ей может быть присвоено значение по умолчанию или начальное значение. Например:
declare
counter integer := 0; – пример исходного значения
emp_commission integer default 0; – пример значения по умолчанию
Кроме поддержки типов данных ORACLE и ANSI/ISO, в PL/SQL разрешается объявлять и константы с использованием ряда других простых типов данных.
В PL/SQL для базовых типов поддерживается множество общих подтипов (см. таблицу 2). Кроме того, в блоке программы PL/SQL можно объявить подтипы, определяемые пользователями, с целью установления домена приемлемых значений для переменной.
В этом примере показано, что в программе нельзя прямо объявлять ограниченные подтипы. Вместо этого, для создания ограниченного подтипа необходимо вначале объявить ограниченную переменную (varchar2_50), а затем ограниченный подтип (description).
PL/SQL позволяет создавать в программах составные типы, определяемые пользователями, а затем объявлять переменные и константы с применением этих новых типов. Переменная, объявленная с составным типом, представляет собой совокупность различных компонентов, каждым из которых можно управлять отдельно. Например, в программе при работе с переменной, имеющей тип записи, можно обновить единственное поле, не обновляя остальные поля.