Приведем пример команды Select в триггере типа When-Validate-Item.
Select name
Into :order. customer_name
From S_customer
Where id = :order.customer_id.
Обратите внимание, что:
переменным Forms предшествует двоеточие;
запрос должен возвращать только одну строку;
необходима обработка исключений;
предложение INTO - обязательно;
предложение Order By не используется.
Рассмотрим, как с помощью триггера организовать проверку данных, вводимых пользователем (рис. 1.2).
Рис. 1.2. Проверка вводимых данных
В случае неудачной проверки триггером вводимого значения Вы должны обработать ситуацию сбоя триггера.
Завершение триггера не рассматривается как неудачное, если
• все исключения обработаны: when <исключение> then действия
(например исключения: NO_DATA_FOUND
TOO_Many_Rows);
• триггеры завершаются неудачно только в случае, если:
• имеет место необратимое исключение;
• возбуждается исключение FORM_ RIGGER_FAILURE.
Пример
Триггер обрабатывает ситуацию, возникшую в случае несовпадения введенного значения Customer_id с базовыми.
Select name, phone
Into : order.customer_name, : order.customer_phone
From S_customer
Where id = : order.customer_id;
EXCEPTION
When no_data_found then
Message ('Не найден покупатель с таким номером'):
Исключение FORM_TRIGGER_FAILURE используют для аварийного отключения триггера:
Триггер создается в редакторе PL/SQL и должен быть откомпилирован. До компиляции необходимо соединится с базой данных. По возможности рекомендуется комбинировать команды Select, используя условия соединения, а также использовать явные курсоры для более быстрой обработки данных. Для использования одного и того же кода в нескольких триггерах пользуйтесь подпрограммами. |