У меня 2 спусковых на столе один находится перед вставкой и один ПОСЛЕ ВСТАВКА:Как обновить таблицу с помощью триггера AFTER INSERT в той же таблице?
CREATE OR REPLACE TRIGGER DEMO_TRG
AFTER INSERT
ON A
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
declare
PRAGMA AUTONOMOUS_TRANSACTION;
begin
UPDATE A
SET STATUS = 'DONE'
WHERE id_id =:new.p_id;
commit;
END;
/
Почему команда обновления в после вставки не работает (статус не установлен DONE)? Я что-то пропустил?
Что именно вы пытаетесь сделать? Триггер с 'AUTONOMOUS_TRANSACTION' и' commit' на самом деле не имеет смысла. В чем основная проблема, которую вы пытаетесь решить? Почему бы вам просто не назначить новое значение столбцу «status» в начале триггера? И что делает триггер 'before'? –
Зачем вам это делать во втором триггере по той же транзакции? Неужели это отдельное заявление? То есть. сделайте вставку, затем, спустя некоторое время, выполните отдельную инструкцию обновления.? – Boneist
Запись вставлена в веб-интерфейс (существующий триггер перед вставкой устанавливает свой статус в «ЗАПРОС»). Я пытаюсь имитировать веб-службу, которая обновляет (через определенное время) статус этой записи, вот почему я используйте триггер после вставки и точно так же: СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ТРИГГЕР DEMO_TRG ПОСЛЕ ВСТАВКИ НА СПИСОК НОМЕРОВ, КАК НОВЫЙ СТАРЫЙ КАК СТАРЫЙ ДЛЯ КАЖДОЙ РУКИ, объявите PRAGMA AUTONOMOUS_TRANSACTION; begin dbms_lock.sleep (5); ОБНОВЛЕНИЕ СТАТУСА SET = 'DONE' WHERE id_id =: new.p_id; совершить; КОНЕЦ;/у вас есть идея реализовать это (с помощью триггера или другим способом). Спасибо – dbabti