我有主表 AAAA 和表 BBBB,它有 FK 到表 AAAA。FK 约束为 ON DELETE SET NULL。还有触发器 ON DELETE ON table BBBB。在此触发器中,从 AAAA 中删除... 为什么在执行从 AAAA 中删除时执行此触发器?(嗯,有递归异常,所以它没有被执行)。
CREATE TABLE AAAA
(
"AAAA_PK" NUMBER NOT NULL ENABLE,
"AAAA_VALUE" NUMBER,
CONSTRAINT "AAAA_PK" PRIMARY KEY ("AAAA_PK")
)
CREATE TABLE "BBBB"
(
"BBBB_PK" NUMBER NOT NULL ENABLE,
"BBBB_FK" NUMBER DEFAULT NULL,
CONSTRAINT "BBBB_PK" PRIMARY KEY ("BBBB_PK"),
CONSTRAINT "BBBB_AAAA_FK1" FOREIGN KEY ("BBBB_FK") REFERENCES AAAA ("AAAA_PK") ON
DELETE SET NULL ENABLE
)
CREATE OR REPLACE TRIGGER TRIG_ON_AFTER_BBBB_DELETE_ALL AFTER
DELETE ON bbbb
BEGIN
-- delete from aaaa where ....
dbms_output.put_line('TRIGGER EXECUTED');
END;
添加一些数据,如 AAAA(1,1) 和 BBBB(1,1)
如果我从 AAAA 中删除行,我希望 BBBB 中的 FK 设置为空,但它失败了
ORA-00036: maximum number of recursive SQL levels (50) exceeded
ORA-06512: at TRIG_ON_AFTER_BBBB_DELETE_ALL, line 2
ORA-04088: error during execution of trigger TRIG_ON_AFTER_BBBB_DELETE_ALL
如果我仅使用输出打印触发,它将被执行 - 但我不会从表 BBBB 中删除!
那么为什么要执行触发器呢?