繁体   English   中英

Oracle SQL中的触发器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM