Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.18;
Скачать: CL | DM;

Вниз

Управвление триггером в хранимой процедуре   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.051 c
2-1148800931
Хочу_все_знать
2006-05-28 11:22
2006.06.18
Как очистить файл который используется


2-1149046199
D@Nger
2006-05-31 07:29
2006.06.18
BLOB not opened


6-1139739620
Alexandr
2006-02-12 13:20
2006.06.18
отправка HTML письма


2-1148882414
n-neo
2006-05-29 10:00
2006.06.18
График


15-1148294900
Имя не скажу
2006-05-22 14:48
2006.06.18
Маленький тренажер для мозга :))