【发布时间】:2014-06-28 12:40:50
【问题描述】:
我的数据库中有以下触发器,但我想知道如何修改它以减少库存。我在这个触发器中有两个值,订单数量和库存水平,我不能在 if 子句中放一个 update 语句吗?我不确定为什么这不起作用,它编译得很好。
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;
【问题讨论】:
标签: sql oracle plsql oracle-sqldeveloper triggers