Я пытаюсь использовать триггер, чтобы избежать удаления строки в таблице Products
при некоторых обстоятельствах. Код следующий
CREATE TRIGGER trgPreventProductRemoval
BEFORE DELETE ON Products
FOR EACH ROW
BEGIN
DECLARE
l_custid INTEGER;
BEGIN
SELECT count(*) INTO l_custid FROM Orders WHERE product = :old.prodDescription ;
IF l_custid > 0 THEN
raise_application_error (-20100, 'You can not delete a product that has active orders!');
END IF;
END;
END;
Однако я получаю сообщение об ошибке: table ORDERS is mutating, trigger/function may not see it
.
Как я могу это исправить?
РЕДАКТИРОВАТЬ-РЕШЕНИЕ: Я принял решение ниже, потому что это "политически корректно". Из-за некоторых «ограничений» я не смог его использовать и, наконец, нашел другой обходной путь. Смотрите решение, которое я опубликовал отдельно.