Основы языка PL/SQL
Приведение типов
PL/SQL поддерживает явное и неявное приведение типов:явное приведение типов выполняется с помощью встроенных функций, а неявное - посредством PL/SQL (если это возможно) при присвоении значения одного типа.
Значения переменных различных типов могут присваиваться друг другу в том случае, если они образованы из одного базового типа
Объявление переменных и констант
Переменные могут иметь тип данных SQL или тип данных PL/SQL.
Переменная объявляется в секциях объявлений блока PL/SQL, подпрограммы или пакета.
Для объявления переменной после ее идентификатора следует указывать любой доступный тип данных.
Объявление переменной в PL/SQL может иметь следующие формы:
var_name type; var_name type := expr; var_name type DEFAULT expr; var_name type NOT NULL := expr; var_name type_var%TYPE; var_name type_var%TYPE := expr; var_name user.table.type_col%TYPE; var_name user.table.type_col%TYPE := expr;
Одновременно, при объявлении переменной, она может быть проинициализирована значением соответствующего типа. Выражение, находящееся справа от знака присваивания, может использовать ранее объявленные и проинициализированные переменные или константы. PL/SQL требует, чтобы используемая ссылка была описана в программе выше места ее применения.
При объявлении переменной вместо оператора присваивания может указываться ключевое слово DEFAULT.
Объявляемая переменная может быть определена как NOT NULL. Такой переменной в дальнейшем нельзя присвоить значение NULL.
Переменным можно присваивать значения двумя способами - как с помощью оператора присваивания, так и как INTO-переменной, указываемой в запросе.
При объявлении константы после идентификатора должно быть указано ключевое слово CONSTANT, а после идентификатора типа - указан оператор присваивания и значение константы.
Объявление константы может иметь следующее формальное описание:
const_name CONSTANT type :=value;
Например:
val_real CONSTANT REAL := 5000.00;
Символьные константы заключаются в одинарные кавычки.
Атрибуты %TYPE и %ROWTYPE
Атрибут %TYPE позволяет объявлять переменную типа, соответствующего:
- типу другой переменной;
- типу столбца базы данных.
Например:
var1 REAL(14,2); var2 var1%TYPE; - Переменная var2 будет иметь тип как var1 var_f1 user1.tbl1.f1%TYPE; /* Переменная var_f1 будет иметь тот же тип, что и поле f1 таблицы tbl1 пользователя user1*/
Атрибут %ROWTYPE позволяет объявлять переменную типа "запись", соответствующую строке таблицы. Переменная такого типа имеет поля, совпадающие с полями таблицы по имени и типу.
Такой тип значительно облегчает программирование операций со строками, позволяя выполнять выборку строки целиком в одну переменную типа "запись", а также предотвращает необходимость перепрограммирования блоков в случае изменения структуры таблицы.
Значения переменным, определенным с использованием атрибута %ROWTYPE , могут быть назначены как присваиванием значения одной записи другой записи, так и как INTO-переменным оператора SELECT.
Например:
DECLARE tbl1_rec1 tbl1%ROWTYPE; - Для строки из таблицы tbl1 tbl1_rec2 tbl1%ROWTYPE; CURSOR c1 IS SELECT * FROM tbl1; emp_rec2 c1%ROWTYPE; - Для строки курсора с1, - созданного из таблицы tbl1 emp_rec3 с1%ROWTYPE; BEGIN SELECT * INTO tbl1_rec1 FROM tbl1 WHERE tbl1.f1=1; emp_rec2 := emp_rec1; - Присвоение значения всем полям записи END
Переменная типа "запись" без квалификации именами полей может использоваться только для выборки значений, но ее нельзя применять для вставки или обновления значений строки. В SQL-операторе вставки или обновления для каждого столбца таблицы должно быть указано значение поля записи.