我正在制作一个用于学习目的的库存数据库项目。我是开发新手,请帮助我。
我有两张桌子
StockRecords(InventoriID, ItemID, Quantity)
Purchase_Details(SupplierID, supplier_invoice, itemID, quantity, purchase_date)
我需要在购买新商品时更新库存。现在我需要调用dml触发器,但我很困惑如何获取表中最后插入的值。
我已经编写了一个程序,我打算在触发器中调用更新StockRecord表,但我需要在表Purchase_Detail中找到最后一个插入的值,这样我就可以在我的过程中解析itemID和最后一个条目的数量来更新记录表。 / p>
答案 0 :(得分:0)
只有一列看起来像是候选人:purchase_date
,如果它代表购买商品的最后日期。在这种情况下,您必须找到MAX(purchase_date)
的行。但是,如果该列中存储了多个具有相同值的行,则表示运气不佳。
换句话说,您需要修改当前数据模型。看来purchase_details
表没有主键。如果确实如此,并且如果它由序列填充,那么您就拥有该列(MAX(primary_key_column)
)。
另一方面,说有一个触发器涉及:如果它为每一行触发,那么你可以使用:new(或:old,取决于你做什么)pseudorecord标识符 - 基本上 - 不关心插入的 last 行 - 您处理当前。
这样的事情:
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;
这也意味着你可能不需要那个"程序"你提到过,ifs的唯一目的是在STOCKRECORDS
表中插入一行。