必须声明标识符 'NEW.CITY_POPULATION'

identifier 'NEW.CITY_POPULATION' must be declared

我正在尝试声明一个 oracle 触发器,该触发器将在城市人口达到 0 时更新城市名称,但出现此错误。


LINE/COL  ERROR
--------- -------------------------------------------------------------
3/5       PL/SQL: Statement ignored
3/11      PLS-00201: identifier 'NEW.CITY_POPULATION' must be declared
Errors: check compiler log```

here is my code

```CREATE TRIGGER tr_Town_Death AFTER UPDATE 
ON Cities
FOR EACH ROW BEGIN

    IF NEW.city_population = 0 THEN
        UPDATE Cities 
        SET city_name = 'Ghost town' 
        WHERE city_id = NEW.city_id;
    END IF;
END tr_Town_Death;```
  1. 如果您要在触发器主体中引用 :new 伪记录,则需要以冒号作为前缀。
  2. cities 上的触发器通常无法查询 cities table。在这种情况下,您似乎想要修改触发触发器的行中的数据,因此您只想更新 :new 伪记录。
  3. 由于您要修改导致触发器触发的行,因此您希望它成为 before update 触发器。

当我们进行这些更改时,您最终会得到这样的结果

CREATE TRIGGER tr_Town_Death 
  BEFORE UPDATE 
  ON Cities
  FOR EACH ROW 
BEGIN
    IF :NEW.city_population = 0 
    THEN
        :new.city_name := 'Ghost town';
    END IF;
END tr_Town_Death;