Форум: "Базы";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];
ВнизКак можно отменить в ставку в тригере в Фаерберде 1.5 Найти похожие ветки
← →
Rule © (2005-01-20 17:19) [0]Необходимо чтобы при какихто условиях вставки данных тригер рубил эту вставку ...
какую команду надо послать, ну типа если сделать так
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;
теперь собственно зачем мне это надо, мне надо сделать так чтобы не вставлялись дублирующие записи, причем не надо чтоб возникали ошибки, просто надо чтоб молча не вставлялось и все ... причем реализовать на тригерах ...
← →
P.N.P. © (2005-01-20 17:23) [1]Как вариант - соорудить хп, в ней и проверять.
или все-таки
then exception nelza_vstavlat;
и обрабатывать ошибки.
← →
Rule © (2005-01-20 17:36) [2]P.N.P. © (20.01.05 17:23) [1]
про хп думал, но не подходит а вот про
then exception nelza_vstavlat,
надо подумать
← →
Rule © (2005-01-20 17:47) [3]P.N.P. © (20.01.05 17:23) [1]
нет, эксепшены не катит, потомучто будет вываливаться сообщение, а мне надо тихо ... чтоб никто не знал :)
← →
LM2 (2005-01-20 17:53) [4]>>Rule ©
ну так загони все в try..except
типа
try
IBQuery.ExecSQL;
except
//ничего не выводим
end;
← →
Соловьев © (2005-01-20 17:54) [5]>чтоб никто не знал :)
try
Insert;
except
//никто и не узнает
end;
← →
Rule © (2005-01-20 18:06) [6]LM2 (20.01.05 17:53) [4]
Соловьев © (20.01.05 17:54) [5]
не я пишу клиенсткое приложение, поэтому этот писатель меня попросил сделать именно так, чтоб он вставлял, а на стороне базы все делалось само ...
но я ему сразу про трай эксепт говорил, только я тогда имел ввиду уникальный ключ на все поля (кроме сурагатного первичного ключа конечно), и при вставке сделать трай эксепт ... и всё
← →
Соловьев © (2005-01-20 18:16) [7]>не я пишу клиенсткое приложение, поэтому этот писатель меня
>попросил сделать именно так, чтоб он вставлял, а на стороне базы
>все делалось само ...
не догнал...обясни нормально
← →
YurikGL © (2005-01-20 18:53) [8]
> Rule © (20.01.05 17:19)
Честно говоря, ИМХО БД все же должна сообщать вставилась запись или нет. Если нет - вызывается ексепшн.
← →
Rule © (2005-01-20 19:18) [9]Соловьев © (20.01.05 18:16) [7]
Ну вобщем если утрировать, то получиться, что есть готовое приложение без исходников, и надо сделать так чтобы оно не вставляло дублирующих записей ... записи вставляются большими дозами, поэтому жать на каждой дублирующей записи кнопку - это не есть хорошо ... а по логике работы, 2 одинаковые записи несут дублирующую информацию ... что плохо сказывается на других приложениях, которые ведут подсчет по этим таблицам
← →
Rule © (2005-01-20 19:18) [10]YurikGL © (20.01.05 18:53) [8]
Несомненно, но смотри условия
Rule © (20.01.05 19:18) [9]
← →
YurikGL © (2005-01-20 20:02) [11]
> Rule © (20.01.05 19:18) [10]
А может написать триггер на после добавления, который бы удалял записи по нужному признаку?
← →
Danilka © (2005-01-21 08:38) [12]Как один из возможных вариантов, сделай вьюху с триггером и пусть работают с ней. А в триггере уже смотри - добавлять или нет запись.
← →
Deniz (2005-01-21 09:33) [13]1. Переименовать табличку
2. Сделать view(со старым именем таблицы) на эту табличку
3. Наставить триггеры на всякие действия
4. В триггерах принимать решение о вставке в таблицу.
← →
midavik © (2005-01-21 09:35) [14]А транзакция в триггере не подойдет?...
← →
Deniz (2005-01-21 09:45) [15]>midavik © (21.01.05 09:35) [14]
Это типа SavePoint?
← →
midavik © (2005-01-21 09:54) [16]щас не помню точно как, но что, типо такого не прокатит?
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:59) [17]Нет там такого
← →
Johnmen © (2005-01-21 10:31) [18]>Rule ©
См. "DATA DEFINITION GUIDE" глава "Working with
Stored Procedures" раздел "Exceptions" параграфы "Raising an exception in a stored procedure" и "Handling errors"
← →
Rule © (2005-01-21 11:09) [19]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]
вечером гляну, спасибо .... и не подумал ..
спасибо что послал :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.056 c