Хей, опитвам се да създам тригер в моята база данни на 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;
Предполагам, че причинявам задънена улица, защото тригерът се стартира в себе си. Някакви идеи?