我有这个问题,我可以看到它在问什么,但是我不知道如何专门写它:
当新的元组插入到销售订单明细中时,您的触发器应在报告日期的库存报告表中插入相应的原材料元组(即,开始库存水平,消耗量,当天订单数量,下一个日订单数量)
我从笔记中收集的假设:
itemID =来自RAWMATERIALS表的itemID
来自SALESORDERS表的reportDate = dueDate
来自RAWMATERIALS表的begInv = inventoryLevels
consumpQty = FINISHEDGOODS中的itemID * rmQuantity(每件成品所需的原材料)来自成品商品
orderNextDay =如果consumpQty< = begInv则orderNextDay = consumpQty orderSameDay = 0
orderSameDay =如果consumpQty> begInv然后orderNextDay = begInv orderSameDay = consumpQty - begInv
我认为触发器可能类似于:
CREATE OR REPLACE TRIGGER inv_report
BEFORE INSERT
ON SALESORDERDETAIL
FOR EACH ROW
DECLARE
item_id RAWMATERIALS.ITEMID%TYPE
reportDate SALESORDERS.DUEDATE%TYPE
begInv RAWMATERIALS.INVENTORYLEVEL%TYPE
然后我明白我们可能需要INSERT到INVENTORYREPORT表(当前没有数据)并且可能做一个IF ELSEIF语句来满足orderNextDay和orderSameDay列,但我还是不熟悉PL / SQL确切地知道如何解决这个问题。
任何人都可以帮我解决这个问题吗?谢谢!
答案 0 :(得分:0)
我会试着找一些时间为你写一些代码,但我的第一个建议是不要在触发器中执行此操作。而是创建一个插入SALESORDERDETAIL的过程“insert_so_detail”,然后将相关的插入执行到INVENTORYREPORT。
然后始终调用该过程以插入S-O-D表。在触发器内执行DML是一件棘手的事情,因为数据库可能决定需要重新启动DML,然后可能再次插入I-R表。有关详细信息,请查看此AskTOM thread。
最好将DML放入PL / SQL包API,然后只允许表通过 API的DML(授予包执行,不授予插入或更新或删除在桌子上直接给用户)。