ORACLE SQL创建更新触发器

时间:2015-03-03 15:56:59

标签: sql oracle triggers

嘿所有,所以我试图创建一个触发器,当它们低于某个值时会更新表中的值。

例如说我有表库存:

Item | Quantity
-----|---------
A    |      400
B    |      160
C    |     1200
D    |      105

如果项目的数量应该低于100,我想制作一个可以添加随机值(100 - 200)的触发器。

这就是我的想法:

CREATE OR REPLACE TRIGGER QuantityTrigger
AFTER
UPDATE ON INVENTORY FOR EACH ROW
BEGIN
 IF :QUANTITY < 100 THEN
   UPDATE INVENTORY
   SET QUANTITY = QUANTITY + dbms_random.value(100,200);
 END IF;
END;

然而,这给了我错误:Error(2,9): PLS-00049: bad bind variable 'QUANTITY'

我做错了什么?任何建议表示赞赏。谢谢!

2 个答案:

答案 0 :(得分:2)

语法错误:将:QtyOnHand更改为:new.QtyOnHand

逻辑错误:不是编写后触发器,而是将其更改为before触发器,只更新列值而不进行任何更新。

CREATE OR REPLACE TRIGGER QuantityTrigger
BEFORE
UPDATE ON QITEM FOR EACH ROW
BEGIN
 IF :new.QtyOnHand < 100 THEN
   :new.QtyOnHand := :new.QtyOnHand + dbms_random.value(100,200);
 END IF;
END;
/

然而,我会调查哪个程序在此表中插入小于100的值并修复它。使用触发器是一种破解,你试图掩盖问题的症状而不是治愈它。

只需在插入语句中使用相同的逻辑,只要您怀疑插入的值小于100即可。

答案 1 :(得分:1)

我相信您正在寻找的价值在:

:new.Quantity