首页 > 解决方案 > 插入或更新的值过高或过低时的 SQL 触发器

问题描述

我正在尝试创建一个触发器,该触发器在插入或更新的汽车价格过高或过低时运行。在尝试编译时,它只是说必须在我使用或看到的其他类似方法使用相同方法的地方声明标识符。

CREATE OR REPLACE TRIGGER carlistprice_insert_update 
BEFORE INSERT OR UPDATE ON car
FOR EACH ROW
    WHEN (NEW.carlistprice < 0 OR NEW.carlistprice > 250000)
BEGIN
        IF NEW.carlistprice < 0 THEN
        :NEW.carlistprice := 0;
        END IF;
        IF NEW.carlistprice > 250000 THEN
        :NEW.carlistprice := 250000;
        END IF;
END;
/

我将这个程序基于这个代码块,它可以工作并且不需要声明标识符。

CREATE OR REPLACE TRIGGER cust_before_insert
BEFORE INSERT ON customer
FOR EACH ROW
    WHEN(NEW.custname != UPPER(NEW.custname))
BEGIN
    :NEW.custname := UPPER(:NEW.custname);
END;
/

carlistprice 是我的一张表中的有效列

标签: sqloracleplsqloracle-sqldeveloper

解决方案


  • inWHEN子句,NEW(以及OLD)没有冒号。
  • 在其他地方,它必须以冒号开头

所以:

CREATE OR REPLACE TRIGGER carlistprice_insert_update 
  BEFORE INSERT OR UPDATE ON car
  FOR EACH ROW
WHEN (NEW.carlistprice < 0 OR NEW.carlistprice > 250000)  -- no colon here
BEGIN
  IF :NEW.carlistprice  < 0 THEN                   -- colon here
     :NEW.carlistprice := 0;                       -- and here
  END IF;

  IF :NEW.carlistprice  > 250000 THEN              -- and here
     :NEW.carlistprice := 250000;                  -- and here
  END IF;
END;
/

推荐阅读