Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.49 MB
Время: 0.036 c
3-1106220984
Layner
2005-01-20 14:36
2005.02.20
Разделители дроби в MSSQL на сервере и разделитель на клиенте


9-1100882607
Kobik
2004-11-19 19:43
2005.02.20
Вопросы по Direct3D (JEDI)


14-1106881694
Думкин
2005-01-28 06:08
2005.02.20
С Днем Рождения! 28 января


1-1107451655
HF-Trade
2005-02-03 20:27
2005.02.20
Народ, есть ли разница между Visible.True False и Show Hide


1-1107703259
serko
2005-02-06 18:20
2005.02.20
Создание файла!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский