【问题标题】: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'

标签: sql oracle plsql triggers compiler-errors


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 2020-03-10
    • 2013-08-24
    相关资源
    最近更新 更多