带有INSERT的Oracle SQL事务

时间:2018-12-08 04:54:57

标签: sql oracle

我正在写一个杂货仓库数据库。我有try_using_arg张桌子,有些在这个问题上并不重要。

我要避免出现这样的问题:客户下达了新的产品订单,但是我们的仓库中没有足够的这种产品。

我必须进行交易,以避免两个客户同时下新订单,而其中一个在第二个客户下订单时订购了最后一个商品的情况。

我真的不知道该怎么做,因为只有工人才能减少每种产品的用量。因此,我希望在删除工作人员的订单(由客户制作)时,可用产品的数量减少了。

我知道我可以将其放入触发器,但问题是:

  

如何通过检查可用金额来定义订购产品的交易。我应该算出两者之间的差异吗   表产品的数量和订购产品的数量   时间(未实现的订单)。

如何做到?

2 个答案:

答案 0 :(得分:0)

对于订单,您必须管理该产品的库存,每当有人要下订单时,您都必须检查产品的可用性。

答案 1 :(得分:0)

您可以做的一件事是在orders表上放置一个触发器,该触发器从products表中减去数量,并在数量为负数时引发异常。触发条件为:

update products set current_quantity = current_quantity - :new.amount_purchased
 where id = :new.product_id
returning current_quantity into l_current_quantity;

if l_current_quantity < 0 then
    raise_application_error( -20001, 'Amount ordered larger than remaining quantity.' );
end if;

您必须在订购过程中处理异常。

相关问题