代码之家  ›  专栏  ›  技术社区  ›  Asim Minhas

如何获取表中最后插入的记录?

  •  -1
  • Asim Minhas  · 技术社区  · 7 年前

    我正在制作一个库存数据库项目,供大家学习。我是新手,请帮助我。

    我有两张桌子

    StockRecords(InventoriID, ItemID, Quantity)
    
    Purchase_Details(SupplierID, supplier_invoice, itemID, quantity, purchase_date)
    

    每当购买新物品时,我都需要更新库存。现在我需要调用一个dml触发器,但我对如何获取表中最后插入的值感到困惑。

    我已经编写了一个过程,我打算在触发器中调用该过程来更新StockRecord表,但我需要在表Purchase\u Detail中找到最后插入的值,以便我可以在更新记录表的过程中解析itemID和最后一个条目的数量。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Littlefoot    7 年前

    只有一个专栏看起来像是这方面的候选人: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 桌子