![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Update без выполнения триггеров [D7, IB5.x, IB6.x]
Апач © (2004-02-27 06:40:00)Есть ли у update какоинибуть параметр чтобы отключить выполнение тригеров
Ето необходимо при выполнении тригера на обновление таблицы когда необходимо изменять записи етои же таблицы, а то происходит бесконечная рекурсия, уже достало ставить всякие условия, может быть кто знает
Zacho (2004-02-27 08:23:00) [1]Не DLL, а DDL :)
ALTER TRIGGER относится именно к DDL :)
Апач (2004-02-27 08:18:00) [2]Захо ты абсолютно прав
Так мы и сделали
но я думал что тригер отключить будет красивее и потом другим понятнее :)
Хотя боюсь что я тока зря трачу время
а опрераторы DLL мы не используем приципиально :)
Zacho (2004-02-27 08:14:00) [3]Не очень внимательно вникал, но может достаточно одного условия IF (NEW.ID_PODR<>OLD.ID_PODR) THEN ..
> Апач (27.02.04 08:10) [4]
Естественно, в триггерах и ХП операторы DDL не доступны.
Апач (2004-02-27 08:10:00) [4]ах да совсем забыл написать
пробывал писать
ALTER TRIGGER <имя тригера> INACTIVE
.....
ALTER TRIGGER <имя тригера> ACTIVE
ругается на синтаксическую ошибку
Апач (2004-02-27 08:07:00) [5]Задача следующая
Есть таблица с полями
Основная таблица(I)
1 SI_ID - уникальный ID
2 NAME - нименовани СИ
.....
5 ID_Podr - подразделение на которые ложатся затраты
Таблица комплектов(II)
1 KOMPL_ID - уникальный ID
2 NAME - наименование
Таблица спецификации комплекта(III)
1 KOMPL_ID
2 SI_ID
Так вот сама задача
На таблицу (I) вешается тригер после обновления записи проверяется в какои комплект входит это средство измерения по таблице (III) по ней же определяются все средства измерения которые входят в етот же комплект ноходим ети же записи в таблице (I) и и обновляем там поле ID_Podr чтобы затраты по одному комплекту относились к одному подразделению. Следует заметить что не все записи могут входить в какие либо комплекты поетому присутствие поля ID_Podr в таблице (I) обязательно.
Поетому тригер после обновления таблицы (I) вызывает сам себя,
можно повесить конечно кучу условий как я сделал, но я просто подумал а нет ли у update какогонибуть параметра который бы отключил бы тригер который вызывает етот update...
Вот пожалуй все :) незнаю понятно непонятно...
Zacho (2004-02-27 07:27:00) [6]Добавлю: сделать ALTER TRIGGER в триггере - не получиться. Можешь попробовать поиздеваться над системными таблицами (см. главу "System tables and views" в Language Reference), но не советую.
Мне все-таки кажется, что у тебя или неправильно спроектирована БД, или непраильно поставлена задача, или ты ее пытаешься решить неравильным способом. Так что лучше подробнее опиши задачу.
Zacho (2004-02-27 07:13:00) [7]Нет. Но можно перед update сделать ALTER TRIGGER name INACTIVE , а после - ALTER TRIGGER name ACTIVE
А вообще лучше опиши подробнее задачу, а то как-то очень подозрительно выглядит это.