我的数据库中有以下触发器,但我想知道如何修改它以减少库存。我在这个触发器,订单金额和库存水平中都有两个值,我可以在if子句中放一个更新语句吗?我不确定为什么这不起作用,它编译得很好。
create or replace TRIGGER INVENTORY_AVAIL
Before INSERT
ON THC_ORDER
FOR EACH ROW
DECLARE
v_quantity_diff number;
v_onhand_quantity number;
BEGIN
-- TRIGGR ON THIS...
--INSERT INTO THC_ORDER
--( FK_ORDER_NO, FK_PROD_ID, QUANITY , COMPLETE_STATUS)
--VALUES
--( :NEW.FK_ORDER_NO, :NEW.FK_PROD_ID, :NEW.QUANITY , :NEW.COMPLETE_STATUS);
SELECT INVENTORY_ONHAND INTO v_onhand_quantity
FROM THC_INVENTORY
WHERE :new.fk_prod_id = THC_INVENTORY.FK_PROD_ID;
IF( (v_onhand_quantity - :NEW.QUANTITY) >= 0)
THEN
INSERT INTO THC_ORDER ( FK_ORDER_NO, FK_PROD_ID, QUANTITY, COMPLETE_STATUS)
VALUES ( :NEW.FK_ORDER_NO, :NEW.FK_PROD_ID, :NEW.QUANTITY , :NEW.COMPLETE_STATUS);
/* not sure if this should be a separate trigger... */
UPDATE THC_INVENTORY
SET INVENTORY_ONHAND = v_onhand_quantity - :NEW.QUANTITY;
ELSE
raise_application_error (-20001,'ERROR: QUANTITY ' || :NEW.QUANTITY
|| ' EXCEEDS INVENTORY ONHAND [' || TO_CHAR(v_onhand_quantity) || ']' );
END IF;
END;
答案 0 :(得分:1)
我认为你的触发器中的问题不是其他表中的更新(没有特别的问题),而是插入了the_orders。它会级联触发,直到库存为空!因此,将插入物移除到触发器中,我希望它能正常工作。