powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите разобраться с триггером
6 сообщений из 6, страница 1 из 1
Помогите разобраться с триггером
    #39206975
Foxsi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!!! У меня проблема, хочу создать триггер, который будет обновлять значения в атрибутах, при условии, если необходимый атрибут в кортеже будет равен 0. Создаю в IBExpert, субд Firebird 2.5.

CREATE OR ALTER TRIGGER STORAGE_TRIG FOR STORAGE
ACTIVE AFTER UPDATE POSITION 0
AS
begin
update storage set number_cell=null, date_crib=null, date_r_control=null where new.quantity_material='0';
end

Все хорошо, он проводит транзакцию по его созданию, но ничего не работает, подскажите, пожалуйста, что я забыла указать здесь? Потому что в отдельность запрос update работает.
...
Рейтинг: 0 / 0
Помогите разобраться с триггером
    #39206986
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxsi,

Код: sql
1.
where new.quantity_material='0';


эээ, просто ерунда какая-то.

во-первых, почему new.quantity_material='0', а не new.quantity_material=0 ? quantity_material - это числовой или строковый столбец? Если числовой, зачем тогда пишете '0'?

во-вторых, new.quantity_material - это переменная, внутри триггера, содержащая новое значение столбца. Поэтому условие where new.quantity_material = 0 не относится к таблице, а значит обновит вообще все записи (или ни одной, если условие false).

В третьих... вы в триггере на STORAGE делаете update storage, т.е. саму же таблицу, что элементарно может вызвать рекурсию (зацикливание).

В общем, есть подозрение что update вам тут нафиг не нужен, исходя из
" который будет обновлять значения в атрибутах "
Таким образом, содержимое триггера должно быть примерно такого вида
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
begin
  if (new.quantity_material = 0) then
    begin
       new.number_cell = null;
       new.date_crib = null;
       new.date_r_control = null;
    end
end
...
Рейтинг: 0 / 0
Помогите разобраться с триггером
    #39206991
Foxsi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv, Вы волшебник, цалую Вас в обе щёки))
...
Рейтинг: 0 / 0
Помогите разобраться с триггером
    #39206993
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxsi,

это не все. у вас триггер ACTIVE AFTER UPDATE
а в нем изменение столбцов уже НЕ работает, он после update, а не перед.
Нужен BEFORE UPDATE.
...
Рейтинг: 0 / 0
Помогите разобраться с триггером
    #39206994
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxsi,

почитайте документацию, там и примеры есть
http://www.ibase.ru/files/firebird/langref25rus/index.html#langref25-ddl-trigger
...
Рейтинг: 0 / 0
Помогите разобраться с триггером
    #39206995
Foxsi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv, да да, я уже поняла, поставила before, и все отлично! на самом деле, я изначально так и начала писать триггер, но походу где-то вышла ошибочка, и тут я начала в разных интерпретациях тестить данную идею((
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите разобраться с триггером
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]