从不同的表创建触发器

时间:2015-10-22 03:03:24

标签: sql oracle database-trigger

我有一个名为M_InventoryLine

的表格
      M_InventoryLine
M_Product_ID  || QtyEntered
101           || 50

        M_Replenish
M_Product_ID  || Level_Min
101           || 20


VW_DaftarBarang_Available
M_Product_ID || Available
101          || 35

QtyEntered不能超过Available + Level_Min因此,我需要在触发器中Raise Application Error

我尝试过这样的触发器:

CREATE OR REPLACE TRIGGER SAVE_ERROR
BEFORE INSERT OR UPDATE ON M_INVENTORYLINE
FOR EACH ROW
DECLARE 
    AVAILABLE_ST NUMBER;
    MIN_LEVEL NUMBER;
BEGIN

  SELECT AVAILABLE INTO AVAILABLE_ST
    FROM vw_daftarbarang_available 
   where m_product_id = :new.m_product_id;

  SELECT LEVEL_MIN INTO MIN_LEVEL
    FROM M_REPLENISH
   WHERE M_PRODUCT_ID = :NEW.M_PRODUCT_ID;

  IF :NEW.QTYENTERED > :OLD.AVAILABLE + :OLD.MIN_LEVEL THEN
    RAISE_APPLICATION_ERROR(-20000,'QUANTITY IS NOT ENOUGH');
  END IF;
END;

但它不起作用。有什么建议让触发成功吗?

1 个答案:

答案 0 :(得分:0)

编辑你的触发器:

  CREATE OR REPLACE TRIGGER SAVE_ERROR
  BEFORE INSERT OR UPDATE ON M_INVENTORYLINE
  FOR EACH ROW
  DECLARE 
      AVAILABLE_ST NUMBER;
      MIN_LEVEL NUMBER;
  BEGIN

  SELECT AVAILABLE INTO AVAILABLE_ST FROM vw_daftarbarang_available 
  where m_product_id = :new.m_product_id;

  SELECT LEVEL_MIN INTO MIN_LEVEL FROM M_REPLENISH
  WHERE M_PRODUCT_ID = :NEW.M_PRODUCT_ID;

  IF :NEW.QTYENTERED > AVAILABLE_ST  + MIN_LEVEL
  THEN RAISE_APPLICATION_ERROR(-20000,'QUANTITY IS NOT ENOUGH');
  END IF;
  END;