我有一个数据库,里面有商店和出租的副本。每个租赁副本都分配给一家商店。我想创建一个触发器,如果您删除某个存储,它会将该存储的所有副本分配给另一个预定义存储(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)

最佳答案

看一下您的代码,似乎您的表rentalcopy通过两个表的列cvr上的外键连接到store。
因此,rentalcopy中的cvr值必须在store表中具有相应的cvr,否则将出现外键错误。
您收到的错误可能是因为您试图从存储中删除/更新CVR记录
(因为表rentalcopy的forign键在存储表中没有作为子表的cvr),也不是因为任何触发器语法错误

09-11 19:59