Эй, я пытаюсь создать триггер в своей базе данных Oracle, который изменяет все остальные записи, кроме той, которая только что была изменена, и запустил триггер на 0. Потому что я обновляю записи в той же таблице, что и та, которая запустила триггер. Я получил ошибку мутирующей таблицы. Чтобы решить эту проблему, я помещаю код как анонимную транзакцию, однако это вызывает взаимоблокировку.
Код запуска:
CREATE OR REPLACE TRIGGER check_thumbnail AFTER INSERT OR UPDATE OF thumbnail ON photograph
FOR EACH ROW
BEGIN
IF :new.thumbnail = 1 THEN
check_thumbnail_set_others(:new.url);
END IF;
END;
Код процедуры:
CREATE OR REPLACE PROCEDURE check_thumbnail_set_others(p_url IN VARCHAR2)
IS PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
UPDATE photograph SET thumbnail = 0 WHERE url <> p_url;
COMMIT;
END;
Я предполагаю, что вызываю тупик, потому что триггер запускает сам себя. Есть идеи?