Возможен ли BREAK_INSERT в тригере?
Возможен ли BREAK_INSERT в тригере?
А можно ли в триггере отменить вставку/удаление: не откатывая транзакцию, без участия клиента, без шума и пыли?
В догонку: Возможен ли BREAK_INSERT в тригере?
Пока что есть только не спортивный вариант для ALTER trigger:
if(......) then
delete from MYTABLE where ID = new.ID;
кстати, а такой вариант не катит:
delete from MYTABLE where MYTABLE.RDB$DB_KEY = new.RDB$DB_KEY;
(FB2.0.3 WinXP)
if(......) then
delete from MYTABLE where ID = new.ID;
кстати, а такой вариант не катит:
delete from MYTABLE where MYTABLE.RDB$DB_KEY = new.RDB$DB_KEY;
(FB2.0.3 WinXP)
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
ну и какие проблемы? обработайте exception на клиенте. спрячьте его, скажите пользователю "нельзя удалять", и т.п.У меня exception ex; не подходит, т.к. шлёт клинту сообщение...
уже сказали - вызовом exception. при этом отменится целиком оператор, выполнение которого привело к срабатыванию триггера.как можно в триггере отмену вставки данной записи сделать...
В том то и соль, что на клиенте (одном из клиентов) нет возможности обрабатывать исключения, т.е. есть только винарник клиента. А в таблицу вставляются записи из десятков других триггеров и процедур (некий буфер для "риплекации"). Но зачастую такие записи вставлять не надо, при некоторых условия (которые часто приходится менять). Так же можно было бы обрамить условие в процедуру, которую вызывать во всех местах перед вставкой, что видимо и придётся сделать. По этому и прошу совета, чтобы не вставлять без сообщений клиенту и отката транзакции, т.е. по "спортивному", а не через делит... Вот.