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

Вниз

Ошибка при написании триггеров - deadlock   Найти похожие ветки 

 
Пубертанец   (2004-02-02 16:14) [0]

Если в триггере для INSERT выполняю команду INSERT происходит ошибка, а все остальные команды (UPDATE) выполняются нормально. То же самое и для UPDATE и для DELETE - пишет deadlock. А смысл вот в чем: если, например, пользователь вводит новую запись в какую-нибудь таблицу, то одновременно в триггере должна вставиться еще одна запись в эту же таблицу. Как сделать - ума не приложу.


 
Johnmen ©   (2004-02-02 16:20) [1]

Бесконечная рекурсия..............:))))))))))))
Бороться надо стандартными способами...


 
HSolo ©   (2004-02-02 16:21) [2]

А есть признак, по которому можно отличить запись, введенную пользователем, от записи, вставляемой автоматически? Если есть - проверять его в триггере. Если нету - сделать, чтобы был :)


 
MV   (2004-02-02 16:24) [3]

В триггере анализируй наличие уже вставленной записи. Если уже есть - то exit. Если поподробнее расскажешь, поподробнее поможем.


 
Пубертанец   (2004-02-02 16:34) [4]

Да тут особо нечего рассказывать. Ну, вот, например, в Before Insert триггере для таблицы TABLE1:

IF (NEW.NEWREC="T") then
INSERT INTO TABLE1(FIELD1, FIELD2, FIELD3, NEWREC)
VALUES(NEW.FIELD1+1, NEW.FIELD2+1, NEW.FIELD3+1, "F");

т.е. в результате хочу, чтобы пользователь ввел одну запись, а в таблицу легло сразу две.


 
MV   (2004-02-02 16:58) [5]

А на вставку при условии IF (NEW.NEWREC="F") тоже такая лабуда?
Тогда попробуй подобный код:

declare variable numrows integer;
...
begin
...
IF (NEW.NEWREC="T") then begin
select count(*)
where
FIELD1 <> NEW.FIELD1 + 1 and
FIELD2 <> NEW.FIELD2 + 1 and
FIELD3 <> NEW.FIELD3 + 1 and
NEWREC <> NEW.NEWREC;
into numrows;
if numrows = 0 then /* Если еще не добавлено, тогда - вперед */
INSERT INTO TABLE1(FIELD1, FIELD2, FIELD3, NEWREC)
VALUES(NEW.FIELD1+1, NEW.FIELD2+1, NEW.FIELD3+1, "F") ;

end


 
Пубертанец   (2004-02-02 17:41) [6]

Нет, такое не катит


 
HSolo ©   (2004-02-02 17:43) [7]

А обязательно делать это все в триггере? Может, проще написать ХП для вставки?


 
Пубертанец   (2004-02-02 17:59) [8]

И вызывать ее из клиента? Я хочу, чтобы клиент вообще об этом ничего не знал


 
MV   (2004-02-02 18:03) [9]

А что не катит?


 
Пубертанец   (2004-02-03 12:34) [10]

Не катит то, что как только дело доходит до INSERT, так сразу все вырубается - deadlock.

P.S. Ну нет этой записи в таблице - 100%, но оператор "INSERT" в INSERT-триггере не хочет работать и то же самое для UPDATE-триггера - оператор "UPDATE" не работает, и для DELETE. Т.е. не то, что не работает, а вылетает с ошибкой - deadlock (блокировка по-нашему).



Страницы: 1 вся ветка

Текущий архив: 2004.02.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
9-93746
TGrigory
2003-08-16 11:05
2004.02.29
Вывод текста на поверхность DXDraw


14-94166
PaRL
2004-02-02 22:39
2004.02.29
---|Ветка была без названия|---


6-94060
BlackSun
2003-12-21 20:59
2004.02.29
Как скачать файл в поток?


3-93754
Fom
2004-02-04 16:45
2004.02.29
Как посчитать количество страниц в QReport?


4-94227
OlegV
2003-11-04 13:36
2004.02.29
Перехват перехода по ссылке в IE