如何解决SQL:无论如何要使检查约束引用另一个表
假设我有两个表,一个用于 products,另一个用于 OrderDetails。 我正在尝试做一个检查约束,检查用户是否在 OrderDetails 表中输入了超过 Product 表中数量的数量。
我尝试使用 REFERENCES 子句来引用另一个表,但我没有工作。我猜它只适用于外键约束。因此,如果有任何其他方法可以使检查约束以这种方式工作,我将不胜感激。
alter table orderdetails add constraint quantity_chck check (quantity <= references products(quantity)) ;
解决方法
不,您不能使用检查约束来执行此操作。检查约束应该一直成立。如果您插入一行,然后明天有人来减少您的 product
表中的数量,会发生什么情况?你会违反限制。
听起来您想要做的是检查产品表中是否有足够的数量来填写订单,因此您要检查此时的数量是否足够。如果数量太少,您可以使用触发器执行此操作并引发异常。
create or replace trigger mytrigger
before insert on orderdetails
for each row
declare
l_quantity product.quantity%type;
begin
select p.quantity into l_quantity
from product p
where p.product_id = :new.product_id;
if l_quantity < :new.quantity then
raise_application_error( -20001,'Insufficient quantity in the products table' );
end if;
end;
触发器通常不受欢迎。您也可以使用执行相同操作并始终通过调用该过程在表中插入一行的过程来执行此操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。