Страница 1 из 1
Можно ли в ХП так делать?
Добавлено: 04 авг 2006, 15:35
MEV
begin
execute statement 'alter trigger triggername inactive';
.................
.................
.................
.................
execute statement 'alter trigger triggername active';
end;
Сабж

Добавлено: 04 авг 2006, 15:39
kdv
НЕТ. теоретически можно, но здравый смысл в данной конструкции отсутствует напрочь.
Добавлено: 04 авг 2006, 15:45
Dimitry Sibiryakov
Практический смысл вроде бы отсутствует тоже потому что лично я не поручусь что триггер отключается сразу а не по коммиту. Сейчас придет Дмитрий и скажет наверняка.
Добавлено: 04 авг 2006, 15:57
dimitr
по коммиту, конечно
Добавлено: 04 авг 2006, 15:59
WildSery
Даже если допустить, что нечто возможно будет реализовать схожим образом, это будут не грабли даже, а Грабли.
Когда в таблице что-то не изменится по триггеру, и забывший о них ты или другой разработчик, о них не подозревающий, будет биться головой о стену силясь понять "ну как же так?! всё включено, а изменений нет!"
Был тут один... Он тремя транзакциями похожее делал. Да, триггер отключался, а после выполнения включался. Но когда возникла необходимость что-то отладить, два дня (!) сам же разбирался, "почему!?".
Добавлено: 04 авг 2006, 16:12
MEV
Эта процедура будет вызываться очень редко, в очень специфических случаях и практический смысл в ней всё таки есть. Необходима процедура которая редактирует таблицу в "ручном" режиме. Т.е можно конечно с клиента отключить триггер, запустить ХП и потом активировать его обратно, но это грабли ещё бОльшие. Ну так вопрос собственно в этом и состоит, в одной транзакции это замутить невоможно, т.е. в одной ХП тем более? Или всё же есть варианты.
Добавлено: 04 авг 2006, 16:41
Merlin
Аж два. Датабазе шутдаун перед скользкими вещами и выполнение их в монополе. И программно-отключаемый через if и служебное поле или if и спициятельный юзер код триггеров.