我正在制作一个用于学习目的的库存数据库项目。我是开发新手,请帮助我。
我有两张桌子
StockRecords(InventoriID, ItemID, Quantity)
Purchase_Details(SupplierID, supplier_invoice, itemID, quantity, purchase_date)
每当购买新商品时,我都需要更新库存。现在我需要调用 dml 触发器,但我对如何获取表中最后插入的值感到困惑。
我已经编写了一个程序,我打算在触发器中调用它来更新 StockRecord 表,但我需要在表 Purchase_Detail 中找到最后插入的值,以便我可以解析程序中最后一个条目的 itemID 和数量以更新记录表。
只有一列看起来像一个候选者: the purchase_date
,如果它代表购买某物的最后日期。在这种情况下,您必须找到带有MAX(purchase_date)
. 但是,如果该列中存储了不止一行具有相同值的行,那么您就不走运了。
换句话说,您需要修改当前的数据模型。看来purchase_details
表没有主键。如果是这样,并且它是由序列填充的,那么您将拥有该列 ( MAX(primary_key_column)
)。
另一方面,说涉及一个触发器:如果它为每一行触发,那么你可以使用 :new (或 :old,取决于你做什么)伪记录标识符,并且 - 基本上 - 不关心最后一个插入的行 - 您将处理当前的行。
像这样的东西:
create or replace trigger trg_ai_purdet
after insert on purchase_details
for each row
begin
insert into stockrecords (inventoriid, itemid, quantity)
values (some_seq.nextval, :new.itemid, :new.quantity);
end;
这也意味着您可能不需要您提到的“过程”,如果唯一的目的是在STOCKRECORDS
表中插入一行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句