![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как можно отменить в ставку в тригере в Фаерберде 1.5
Rule © (2005-01-20 17:19:00)Необходимо чтобы при какихто условиях вставки данных тригер рубил эту вставку ...
какую команду надо послать, ну типа если сделать так
declare variable usl smallint;
begin
select count(id) from table 1
where field_1=new.field_1
and field_2=new.field_2
into :usl;
if usl>0 then <оператор который рубит вставку>
end;
теперь собственно зачем мне это надо, мне надо сделать так чтобы не вставлялись дублирующие записи, причем не надо чтоб возникали ошибки, просто надо чтоб молча не вставлялось и все ... причем реализовать на тригерах ...
Rule (2005-01-21 11:09:00) [1]YurikGL © (20.01.05 20:02) [11]
Вариант, спасибо, подумаю ...
Deniz (21.01.05 9:33) [13]
тоже вариант .... надо попробовать ...
midavik © (21.01.05 9:35) [14]
сомневаюсь ...
Johnmen © (21.01.05 10:31) [18]
вечером гляну, спасибо .... и не подумал ..
спасибо что послал :)
Johnmen (2005-01-21 10:31:00) [2]>Rule ©
См. "DATA DEFINITION GUIDE"глава "Working with
Stored Procedures"раздел "Exceptions"параграфы "Raising an exception in a stored procedure"и "Handling errors"
Deniz (2005-01-21 09:59:00) [3]Нет там такого
midavik (2005-01-21 09:54:00) [4]щас не помню точно как, но что, типо такого не прокатит?
declare variable usl smallint;
begin
StartTransaction
select count(id) from table 1
where field_1=new.field_1
and field_2=new.field_2
into :usl;
if usl>0 then RollbackTransaction
else CommitTransaction
end;
Deniz (2005-01-21 09:45:00) [5]>midavik © (21.01.05 09:35) [14]
Это типа SavePoint?
midavik (2005-01-21 09:35:00) [6]А транзакция в триггере не подойдет?...
Deniz (2005-01-21 09:33:00) [7]1. Переименовать табличку
2. Сделать view(со старым именем таблицы) на эту табличку
3. Наставить триггеры на всякие действия
4. В триггерах принимать решение о вставке в таблицу.
Danilka (2005-01-21 08:38:00) [8]Как один из возможных вариантов, сделай вьюху с триггером и пусть работают с ней. А в триггере уже смотри - добавлять или нет запись.
YurikGL (2005-01-20 20:02:00) [9]
> Rule © (20.01.05 19:18) [10]
А может написать триггер на после добавления, который бы удалял записи по нужному признаку?
Rule (2005-01-20 19:18:00) [10]YurikGL © (20.01.05 18:53) [8]
Несомненно, но смотри условия
Rule © (20.01.05 19:18) [9]
Rule (2005-01-20 19:18:00) [11]Соловьев © (20.01.05 18:16) [7]
Ну вобщем если утрировать, то получиться, что есть готовое приложение без исходников, и надо сделать так чтобы оно не вставляло дублирующих записей ... записи вставляются большими дозами, поэтому жать на каждой дублирующей записи кнопку - это не есть хорошо ... а по логике работы, 2 одинаковые записи несут дублирующую информацию ... что плохо сказывается на других приложениях, которые ведут подсчет по этим таблицам
YurikGL (2005-01-20 18:53:00) [12]
> Rule © (20.01.05 17:19)
Честно говоря, ИМХО БД все же должна сообщать вставилась запись или нет. Если нет - вызывается ексепшн.
Соловьев (2005-01-20 18:16:00) [13]>не я пишу клиенсткое приложение, поэтому этот писатель меня
>попросил сделать именно так, чтоб он вставлял, а на стороне базы
>все делалось само ...
не догнал...обясни нормально
Rule (2005-01-20 18:06:00) [14]LM2 (20.01.05 17:53) [4]
Соловьев © (20.01.05 17:54) [5]
не я пишу клиенсткое приложение, поэтому этот писатель меня попросил сделать именно так, чтоб он вставлял, а на стороне базы все делалось само ...
но я ему сразу про трай эксепт говорил, только я тогда имел ввиду уникальный ключ на все поля (кроме сурагатного первичного ключа конечно), и при вставке сделать трай эксепт ... и всё
Соловьев (2005-01-20 17:54:00) [15]>чтоб никто не знал :)
try
Insert;
except
//никто и не узнает
end;
LM2 (2005-01-20 17:53:00) [16]>>Rule ©
ну так загони все в try..except
типа
try
IBQuery.ExecSQL;
except
//ничего не выводим
end;
Rule (2005-01-20 17:47:00) [17]P.N.P. © (20.01.05 17:23) [1]
нет, эксепшены не катит, потомучто будет вываливаться сообщение, а мне надо тихо ... чтоб никто не знал :)
Rule (2005-01-20 17:36:00) [18]P.N.P. © (20.01.05 17:23) [1]
про хп думал, но не подходит а вот про
then exception nelza_vstavlat,
надо подумать
P.N.P. (2005-01-20 17:23:00) [19]Как вариант - соорудить хп, в ней и проверять.
или все-таки
then exception nelza_vstavlat;
и обрабатывать ошибки.