嘿所有,所以我试图创建一个触发器,当它们低于某个值时会更新表中的值。
例如说我有表库存:
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'
我做错了什么?任何建议表示赞赏。谢谢!
答案 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