我刚开始使用SQL并遇到问题:我想编写一个更新前触发器,但是当我尝试更新表时,我总是会收到该错误(ORA-04091)。我真的不明白为什么;因为我认为更新前触发器对突变表没有问题。
BEFORE UPDATE ON ORD
FOR EACH ROW
DECLARE
shipping2 varchar(10);
BEGIN
SELECT SHIPDATE into shipping2
FROM ORD
WHERE ORDID = :old.ORDID;
IF (shipping2 is not NULL) then
raise_application_error(20121,'ORDER already on the way!!!');
end if;
END;
-------------------------------------------------------
UPDATE ORD
SET TOTAL = 222
WHERE ORDID = 603;
答案 0 :(得分:0)
此错误表明您无法在触发器本身内查询在其上触发了触发器的表。
但是在您的用例中,似乎您不需要查询表。如果要访问即将更新的记录上列SHIPDATE
的当前值,只需使用:OLD.SHIPDATE
。
类似这样:
BEFORE UPDATE ON ORD
FOR EACH ROW
BEGIN
IF (:old.SHIPDATE IS NOT NULL) THEN
RAISE_APPLICATION_ERROR(20121,'ORDER already on the way!!!');
END IF;
END;