Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.20;
Скачать: CL | DM;

Вниз

Как можно отменить в ставку в тригере в Фаерберде 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.072 c
9-1099891468
Вась-вась
2004-11-08 08:24
2005.02.20
Вопрос принципиального характера.


1-1107339808
Igor_thief
2005-02-02 13:23
2005.02.20
ЧТо за компонент или как добавить крестик для развертывания?


1-1107359590
SMT
2005-02-02 18:53
2005.02.20
Поддержка Unicode в Delphi 7


1-1107352404
ВОТ
2005-02-02 16:53
2005.02.20
обработчик


14-1107322087
sapsi
2005-02-02 08:28
2005.02.20
Secret net