Предполагая, что версия Firebird не ниже 2.5, короткий ответ - да.
Вы просто создаете простое исключение, подобное этому
create exception my_universal_exception 'This is the default exception text';
Затем используйте его в своем триггере:
ALTER TRIGGER A0 ACTIVE
BEFORE insert POSITION 0
as
begin
if (new.id is null)
then exception my_universal_exception 'You should specify some value for ID.';
end
Лично я использую немного более сложный подход. У меня есть специальная процедура, которая принимает текстовый аргумент и по умолчанию вызывает исключение, однако в зависимости от других пользовательских переменных записывает исключение в таблицу регистрации или выполняет любые другие полезные действия:
CREATE PROCEDURE SHOW_ERROR (
ERROR_TEXT varchar(256) )
AS
begin
if ((select rdb$get_context('USER_SESSION', 'SILENT_MODE') from rdb$database) is not null)
then insert into s_log(log_message)values(:error_text);
else exception my_universal_exception :error_text;
end
Поэтому позже я использую его в своих триггерах следующим образом:
if (new.id is null)
then execute procedure show_error('You should specify some value for ID.');
Также обратите внимание, что, начиная с Firebird 3.0, вы также можете использовать параметры в своих исключениях как описано здесь.
И, конечно же, ваше клиентское программное обеспечение должно соответствующим образом обрабатывать такие ошибки, но это выходит за рамки этого вопроса.
person
miwa
schedule
17.09.2020