![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Управвление триггером в хранимой процедуре [D7, IB7.5]
RomanH © (2006-04-21 13:07:00)Доброго дня мастера.Каким образом можно в хранимой прцедуре приостановить действие триггера котрый увеличивает значение ключевого поля. А после проведения определенных действий вновь включить его.
Alter trigger bef_ins_table inactive;
......
alter trigger bef_ins_Table active; не работает
Desdechado (2006-04-22 20:13:00) [1]> Ну так автор же не наращивает ид для значений, меньших указанного значения.
По всей видимости, они наращиваются в другой БД, ЦБД.
> почему иногда надо приостанавливать работу триггера
Репликация делается обычно отдельно, имхо, когда нет подключенных пользователей. Тогда можно и триггеры отключить, причем штатным способом на все время репликации, а не в процедуре его дергать туда-сюда.
Johnmen (2006-04-21 23:22:00) [2]
> Desdechado © (21.04.06 16:53) [9]
>
> Женя, ты меня поражаешь :)
> Бомба в том, что когда-нибудь генератор достигнет этого
> числа, тогда все пойдет кувырком.
Ну так автор же не наращивает ид для значений, меньших указанного значения. По кр. мере, я так понял с его слов и его кода...:) Чисто формально...
Ну а если он просто разделяет диапазон на два, то, конечно, лучше бы взять значение 2^62.
RomanH (2006-04-21 18:25:00) [3]
> Desdechado ©
Вы были правы
IF( new.id IS NULL ) THEN
new.id = gen_id
так будет правильней.
А на счет бомбы, не знаю.
Просто позвольте мне объяснить почему иногда надо приостанавливать работу триггера.
Когда я добавляю запись на удаленной БД(УБД) ID начинается с 1001000000
на центральной БД(ЦБД) ID начинается с 0.
Когда происходит репликация на УБД я останавливаю триггер и добавляю ID созданные в ЦБД.
Desdechado (2006-04-21 16:53:00) [4]Женя, ты меня поражаешь :)
Бомба в том, что когда-нибудь генератор достигнет этого числа, тогда все пойдет кувырком.
Johnmen (2006-04-21 16:38:00) [5]
> Desdechado © (21.04.06 16:29) [7]
>
> > if (new.menid>1001000000)
> ты здесь заложил большую бомбу
А что за бомба? Какой системы?
Desdechado (2006-04-21 16:29:00) [6]> if (new.menid>1001000000)
ты здесь заложил большую бомбу
RomanH (2006-04-21 13:56:00) [7]
> Desdechado ©
Спасибо за подсказку, решил как сделать.
if (new.menid>1001000000) then new.menid=gen_id(gen_men,1);
Если при вставке новой записи ID > 1001000000 то увеличиваем ID
иначе никаких действий не производим, просто вставляем запись с уже определенным ID.Спасибо еще раз.
Johnmen (2006-04-21 13:52:00) [8]> Каким образом можно в хранимой прцедуре приостановить действие
> триггера
Никаким.
Sergey13 (2006-04-21 13:47:00) [9]2[3] RomanH © (21.04.06 13:38)
>> Desdechado ©
>Дело в том что я хочу его на время отключить.(Чтобы он не генерировал новый ID)
Он тебе про это и написал как сделать.
RomanH (2006-04-21 13:38:00) [10]
> Desdechado ©
Дело в том что я хочу его на время отключить.(Чтобы он не генерировал новый ID)
Вставить новую запись.(Где ID уже определена).
А затем вновь активизировать триггер.
Сергей М. (2006-04-21 13:29:00) [11]
> Каким образом можно в хранимой прцедуре приостановить действие
> триггера
Никаким.
Desdechado (2006-04-21 13:14:00) [12]Можно, но ... нельзя.
Лучше в триггере вставить проверку
IF( new.id IS NULL ) THEN
new.id = gen_id