创建触发器以重新排序列并修改语句级别
Posted
技术标签:
【中文标题】创建触发器以重新排序列并修改语句级别【英文标题】:Create Trigger to reorder a column and modify statement levels 【发布时间】:2015-11-09 00:17:39 【问题描述】:我需要更改 Product 表以具有 varchar2(3) 重新订购列,并修改注释中的语句级别触发器以将产品重新订购字段设置为“是”,如果手头数量小于产品最小值的两倍数量或现有数量少于 10 个。否则,该值应为“否”。在插入或更新 p_min 或 p_qoh 后触发触发器。通过事先检查数据、进行更改、然后检查来进行调试。
为此我有
CREATE or REPLACE TRIGGER
TRG_Product_Reorder
AFTER INSERT OR UPDATE of P_min, P_qoh ON lab9_Product
BEGIN
UPDATE lab9_Product SET REORDER = 'yes'
WHERE P_qoh < P_min*2 or p_qoh < 10;
UPDATE lab9_Product SET REORDER = 'no'
WHERE P_qoh >= p_min*2;
END;
/
我得到错误:
SQL statement ignored
"REORDER": invalid identifier
【问题讨论】:
“REORDER”是您要更新的列的名称吗?如果是,它是否存在于“lab9_Product”表中? 您不能在表中创建触发器来自我更新!您可以做的是更改当前更新或插入行的列的值!认为 IF 允许您以无限循环结束它,因为新的更新会再次调用触发器! 您执行的将REORDER
列添加到LAB9_PRODUCT
表的语句是什么样的?
嗯好吧,你是对的,我之前确实忘记将 REORDER 添加为列。语句添加 REORDER = ALTER TABLE Lab9_Product ADD REORDER varchar2(3) default 'No'
【参考方案1】:
我认为您可能需要 before 触发器而不是 after 触发器。应该是这样的:
CREATE or REPLACE TRIGGER
TRG_Product_Reorder
BEFORE INSERT OR UPDATE of P_min, P_qoh ON
lab9_Product
BEGIN
IF :OLD.P_qoh < :OLD.P_min*2 AND :OLD.p_qoh < 10 THEN
:NEW.REORDER := 'yes';
ELSE :NEW.REORDER := 'no';
END IF;
END;
【讨论】:
以上是关于创建触发器以重新排序列并修改语句级别的主要内容,如果未能解决你的问题,请参考以下文章