【发布时间】:2021-04-02 08:40:56
【问题描述】:
我有下表:
CREATE TABLE individuo(
codigo NUMBER(8) PRIMARY KEY,
nombre VARCHAR2(20) NOT NULL,
valor NUMBER(8) NOT NULL CHECK (valor > 0),
padre NUMBER(8) REFERENCES individuo,
nro_hijos NUMBER(8) NOT NULL CHECK (nro_hijos >=0),
CHECK(padre <> codigo)
);
其中 padre 表示 父亲,nro_hijos 表示 孩子的数量。
我需要一个触发器,当我插入或删除padre IS NOT NULL所在的行时,它会相应地增加或减少nro_hijos .
我试过了:
CREATE OR REPLACE TRIGGER individuo_parent_increment
AFTER INSERT OR DELETE ON INDIVIDUO FOR EACH ROW WHEN (NEW.padre IS NOT NULL)
BEGIN
IF INSERTING THEN
UPDATE INDIVIDUO SET NRO_HIJOS = NRO_HIJOS + 1 WHERE CODIGO = :NEW.PADRE;
END IF;
END;
但它是 ORA-04091(表个体正在变异,触发器/函数可能看不到它)
我也尝试使用COMPOUND TRIGGER,但发生了同样的错误。
我已经设置了一个不同的触发器:
CREATE OR REPLACE TRIGGER individuo_initial_children
BEFORE INSERT ON INDIVIDUO
FOR EACH ROW
BEGIN
:NEW.NRO_HIJOS := 0;
END;
【问题讨论】:
-
我认为在另一个表中保存孩子的信息以及与当前表的主外键关系,并在需要孩子数量时为单个父亲计算新创建的表。例如。为了数据库设计,放弃创建计数触发器。
-
我需要一个触发器,这是一项学术任务:c