Alexandr Kochmin wrote:

это ibexpert умный такой, по-моему. Или кэш метаданных.
Yaffil тут нипричем.

Да в том-то и дело, что пробовал не только из эксперта, но и из своей программы, которая таким разумом не наделена. И кэш тут ни причем: старый триггер цеплял данные, которые были до апдейта, и при повторном апдейте должен был бы выставить верные значения, но в том-то и дело, что второй раз он не вызывался. Меняешь любой поле - срабатывает, присваиваешь полю то же значение, которое в нем уже сидит (не меняя другие поля) - не срабатывает.

Триггер before update (в упрощенном виде):
begin
  select max(F2)/7 from T1 where F1=NEW.F1 into NEW.F3;
end
Т.е. меняю F2 -> должно измениться F3, но т.к. это before, то если я уменьшаю F2, и до этого F2 было максимальным, то в F3 попадает OLD.F2/7, а не NEW.F2/7.
Повторная команда
update T1 set F2=F2 должна была бы исправить F3 -- ан нет :-(

Ответить