[英]Triggers in Oracle SQL
因此,我正在尝试编写一个接受来料订单的触发器,并检查以确保有足够的库存来覆盖该订单。 如果没有,则不要插入订单。 我得到正确的测试输出,但是我不知道如何停止插入。
我得到的输出是:插入1行。 错误:数量144444超过了库存量[11]
这让我想知道触发器是否按预期工作。
create or replace TRIGGER INVENTORY_AVAIL
Before INSERT
ON 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 INVENTORY
WHERE :NEW.fk_prod_id = INVENTORY.FK_PROD_ID;
IF( (v_onhand_quantity - :NEW.QUANTITY) >= 0)
THEN
DBMS_OUTPUT.PUT_LINE('GOOD: QUANTITY ORDERED ' || :NEW.QUANTITY
|| ' ... LEAVES [' || TO_CHAR((v_onhand_quantity - :NEW.QUANTITY))
|| '] INVENTORY ONHAND ' );
DBMS_OUTPUT.PUT_LINE('SUCCESS');
ELSE
DBMS_OUTPUT.PUT_LINE('ERROR: QUANTITY ' || :NEW.QUANTITY
|| ' EXCEEDS INVENTORY ONHAND [' || TO_CHAR(v_onhand_quantity) || ']' );
END IF;
END;
您将不得不提出一个例外。 根据您的情况,更换
DBMS_OUTPUT.PUT_LINE('ERROR: QUANTITY ' || :NEW.QUANTITY
|| ' EXCEEDS INVENTORY ONHAND [' || TO_CHAR(v_onhand_quantity) || ']' );
通过
raise_application_error (-20001,''ERROR: QUANTITY ' || :NEW.QUANTITY
|| ' EXCEEDS INVENTORY ONHAND [' || TO_CHAR(v_onhand_quantity) || ']' );
您可以使用触发器BEFORE INSERT来触发代码,然后将内容插入到表中。 尝试使用INSTEAD OF触发器,如果满足所需的临界条件,它将也处理INSERT语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.