gpt4 book ai didi

database - Oracle 中的触发器以保持数据完整性

转载 作者:搜寻专家 更新时间:2023-10-30 20:41:57 24 4
gpt4 key购买 nike

我有一个包含商店和租赁副本的数据库。每个租赁副本都分配给一家商店。我想创建一个触发器,如果​​您删除某个商店,它会将所有副本从该商店分配给另一个预定义商店 (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,否则您将收到外键错误。

您收到的错误可能是因为您正试图从 Store 中删除/更新 cvr 记录(因为 RentalCopy 表的外键在 Store 表中没有作为子项的 cvr),而不是因为任何触发器语法错误

关于database - Oracle 中的触发器以保持数据完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15803699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com