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