Задавайте вопросы, мы ответим
Вы не зашли.
Обнаружил что имеются ограничения при создании триггеров:
1. триггер можно создать только на изменения в таблице, а не изменения отдельных полей.
2. нельзя создать несколько триггеров на одну и туже таблицу для одного и того же действия
Вообще то второе было бы возможно если бы не было ограничения по первому пункту.
Может я глупости написал...
и можно создать один триггер на таблицу и проверять в нем не изменились ли нужные поля:
IF OLD.field1<>NEW.field1 THEN
statements
END;
и не заморачиваться.
P.S. выяснилось что нельзя сделать UPDATE в триггере для таблицы на которую создан триггер, получаю ошибку:
Can't update table 'tlb1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger
что делать ?
Отредактированно Golova (09.10.2007 20:37:31)
Неактивен
Да, известные ограничения.
Еще можете сюда дописать: "триггер привязан к таблице, а его имя должно быть
уникально в пределах базы данных, а не в пределах таблицы".
Именно поэтому, триггеры именуют каким-то хитрым способом типа 'bi_Table'.
bi = before insert
Неактивен
Делать - не обновлять в том же триггере. Можете использовать слово NEW. для
обновления данных.
Неактивен
Я всетаки не понял что Вы имели ввиду под:
paulus написал:
Можете использовать слово NEW. для обновления данных.
т.е. изменить одно поле при изменении другого поля одной и тойже таблицы я не смогу сделать всё равно?
Неактивен
Golova написал:
Я всетаки не понял что Вы имели ввиду под:
т.е. изменить одно поле при изменении другого поля одной и тойже таблицы я не смогу сделать всё равно?
Видимо это такая защита от зацикливания триггера - при изменении другого поля сработает триггер на третье поле. А, скажем, если запрос на изменение всех полей - как поведет себя триггер?
На самом деле ограничение - то, что триггер нельзя вешать на VIEW. Когда будет можно, Ваше ограничение будет легко обходиться обновлением базовой таблицы или другого VIEW.
Неактивен
спасибо за ответы, будем искать обходные пути
Неактивен
Paulus написал:
триггеры именуют каким-то хитрым способом типа 'bi_Table'.
Только не bi_table, а table_bi, table_bu и т.п.
Неактивен
Golova написал:
изменить одно поле при изменении другого поля одной и тойже таблицы я не смогу сделать всё равно?
Вы можете изменять любые поля для обновляемой (или вновь вставляемой) строки, обращаясь к ним через конструкцию вида
SET NEW.field_name = новое_значение.
Неактивен
А что делать, если я хочу в триггере обновить другую запись? Например, мне надо обновить количество сообщений в ветке?
Неактивен