Главная страница
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.019 c
14-94118
syte_ser78
2004-02-09 14:55
2004.02.29
перевод каретки


14-94155
4i
2004-02-06 23:11
2004.02.29
MyDoom


1-93938
Кен
2004-02-13 04:33
2004.02.29
Как можно в программе на Дельфи использовать перл-скрипт без само


8-94031
GIL
2003-10-27 17:23
2004.02.29
Немигающие картинки


7-94218
nik4543
2003-12-12 05:27
2004.02.29
регулировки яркости моника