Текущий архив: 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