Создать подсказку сообщения в триггере Firebird

Можно ли в триггере выводить пользователю сообщение об ошибке?

Например, если пользователь не ввел значение в поле, он запрашивает их и не сохраняет запись.

Я не знаю, является ли сообщение об ошибке правильным термином. Это может быть исключением.


person Simon King    schedule 16.09.2020    source источник


Ответы (1)


Предполагая, что версия 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