【发布时间】:2013-03-26 02:01:13
【问题描述】:
我有一个包含商店和出租副本的数据库。每个出租副本都分配给一个商店。我想创建一个触发器,如果您删除某个商店,它将将该商店中的所有副本分配给另一个预定义的商店 (cvr)。
我试过这样:
CREATE OR REPLACE TRIGGER delete_trig
BEFORE DELETE ON Store
FOR EACH ROW
BEGIN
UPDATE RentalCopy SET cvr = 123456789
WHERE cvr = :old.cvr;
END;
我收到一条错误消息,指出我违反了先前添加的约束(负责处理这两个表之间的外键),因为它找到了一条子记录。我该如何解决?
这些表的表定义:(相关部分)
租赁副本:
barcode INTEGER NOT NULL,
CVR INTEGER NOT NULL,
PRIMARY KEY(barcode),
CONSTRAINT fk_storeinfo
FOREIGN KEY (CVR) REFERENCES Store
商店:
CVR INTEGER NOT NULL,
store_name VARCHAR2(30) NOT NULL,
PRIMARY KEY(CVR)
【问题讨论】:
-
请添加表定义(至少与相关列)和对它们定义的约束。
-
您能否使约束延迟?或者将删除包装在一个过程调用中以首先进行更新(并可能为repelacement store ID获取一个参数)?
-
你确定你的触发器编译成功了吗?您在此处显示的内容适用于适当的触发器(已在本地测试,但也适用于 on this SQL Fiddle
标签: database oracle triggers constraints