我试图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;
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误:table ORDERS is mutating, trigger/function may not see it.
我该如何解决?
EDIT-SOLUTION:我接受了下面的解决方案,因为它是"政治上正确的".由于一些"限制",我无法使用它,最后找到了不同的解决方法.查看我单独发布的解决方案.
在Orders和Product表之间使用外键而不是触发器.