![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Активизация триггеров в IB
Garry_c © (2005-01-31 08:14:00)По ходу выполнения программы нужно активировать и деактивировать триггер в IB. Подскажите, как это сделать?
Alexander Panov (2005-02-01 14:30:00) [1]На вопрос "Зачем отключать триггер?" двумя словами можно ответить так - "для того, чтобы не триггер не срабатывал в определенные моменты, например, при массовой вставке данных для ускорения обработки".
Alexandr (2005-02-01 06:45:00) [2]на самом деле все зависит от управления кэшем метаданных, архитектуры (CS или SS) и версии сервера.
jack128 (2005-01-31 22:57:00) [3]Sergey_Masloff (31.01.05 22:08) [12]
Сработает после переподключения всех юзеров ;-)
Как для других юзеров не знаю, но у того, кто эти изменения делал, они вступают в силу немедленно после коммита транзакции, в которой alter trigger делали. Проверял в IBE. FB1.5
Sergey_Masloff (2005-01-31 22:08:00) [4]jack128 © (31.01.05 08:40) [2]
>ALTER TRIGGER name
>[ACTIVE | INACTIVE]
DDL. Сработает после переподключения всех юзеров ;-) Так вроде. Как быстро все забывается... Чуть больше полугода с IB не работал и... :(
msguns (2005-01-31 15:01:00) [5]>Val © (31.01.05 13:22) [8]
>Зачем отключать триггер, если можно просто выполнять в нем действия по некому условию?
А можно я задам вопрос по-другому:
Зачем нужен триггер там, где нет однозначного алгоритма воздействия на БД ? Почему нельзя заменить его на ХП, вызываемую по требованию клиента, который "лучше знает условия" ?
Alexandr (2005-01-31 14:36:00) [6]это вообще-то делается заведением специального юзера.
и проверкой в триггере
if current_User<>'username'
then begin
end
Соловьев (2005-01-31 13:43:00) [7]триггеры нужны для поддержания целостности данных - зачем же создавать себе проблемы? Хочется с юзверями бороться? так они быстро надут эту "фичу"... И тогда будешь ловить тумаки.
Val (2005-01-31 13:22:00) [8]Зачем отключать триггер, если можно просто выполнять в нем действия по некому условию?
Desdechado (2005-01-31 10:15:00) [9]Зачем тогда триггер, если его нужно все время отключать?!
Да и при многопользовательской работе кто-то может нарваться на момент, когда триггер отключен другим пользователем, а должен быть включен.
И, помнится, есть такая баго-фича, что изменение метаданных не доступны в одной транзакции с изменением данных.
Johnmen (2005-01-31 09:28:00) [10]>Что неправильно?
DDL команды недоступны в процедурах и триггерах. ЧИТАЙТЕ ДОКУМЕНТАЦИЮ !
Johnmen (2005-01-31 09:27:00) [11]При любой работе это абсурд...
Garry_c (2005-01-31 09:26:00) [12]Хочу активировать и деактивировать триггер с помощью
хранимой процедуры, поскольку к ней есть доступ из пользовательского приложения.
В хранимую процедуру вставил следующий код
ALTER TRIGGER vipusk_bi ACTIVE;
insert into ...;
delete from ...;
ALTER TRIGGER vipusk_bi INACTIVE;
suspend;
где vipusk это таблица
IBExpert ругается на слово Alter?! - неизвестное слово.
Что неправильно?
Может ссылку дадите, где про это написано?
Alexandr (2005-01-31 09:01:00) [13]другой вопрос, как это будет выглядеть при многопользовательской работе.
jack128 (2005-01-31 08:40:00) [14]sniknik © (31.01.05 8:33) [1]
возможно есть способ легального отключения встроенный так сказать
есть.
ALTER TRIGGER name
[ACTIVE | INACTIVE]
[{BEFORE | AFTER} {DELETE | INSERT | UPDATE}]
[POSITION number]
[AS <trigger_body>] [ terminator]
sniknik (2005-01-31 08:33:00) [15]напиши свой тригер зависимым от какой нибудь переменной в IB (да тот же генератор) типа если равен 1 работает, больше пропускаем. установить/менять значение генератора легко...
естественно этот генератор по прямому назначению уже не использовать.
не проблема в обшем (если получится ;о)), могут быть "подводные" камни).
p.s. я с IB не очень "дружу", возможно есть способ легального отключения встроенный так сказать... не знаю прость.