【发布时间】:2022-01-21 10:46:12
【问题描述】:
我有这张表,我想在Magazine 上创建一个触发器,如果插入的Magazine 的名称是Vogue 或People,则验证“插入后” .
如果不是其中之一,则会被删除。
表:
- 杂志(ISBN、MAG_NOM、PRIX_Mois);
我的触发器:
CREATE OR REPLACE TRIGGER TMag
AFTER INSERT ON Magazine
FOR EACH ROW
DECLARE
e EXCEPTION;
BEGIN
IF :new.mag_nom != 'Vogue' or :new.mag_nom != 'People' THEN
DELETE Magazine WHERE ISBN = :new.ISBN;
RAISE e;
END IF;
EXCEPTION
WHEN e THEN
DBMS_OUTPUT.PUT_LINE('nom mag incorrecte');
END;
但问题是我的老师告诉我的:
这并不适合所有情况
我不知道那是什么意思,你能帮我改进一下这个触发器吗?
这对我来说似乎是正确的,我做错了什么?
【问题讨论】:
-
这个触发器不合适,因为它根本不正确。你应该有
ORA-04091: table <table name> is mutating, trigger/function may not see it。您可以为此使用check约束,它更清晰。 -
@astentx 我只是一个初学者,所以我不能 100% 理解你。感谢您的帮助。