【问题标题】:identifier 'NEW.CITY_POPULATION' must be declared必须声明标识符“NEW.CITY_POPULATION”
【发布时间】:2021-05-15 01:23:06
【问题描述】:

我正在尝试声明一个预言机触发器,该触发器将在城市人口达到 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;```

【问题讨论】:

    标签: sql oracle triggers


    【解决方案1】:
    1. 如果您要在触发器正文中引用 :new 伪记录,则需要以冒号为前缀。
    2. cities 上的触发器通常无法查询cities 表。在这种情况下,您似乎想修改触发器触发的行中的数据,因此您只想更新 :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;
    

    【讨论】:

      猜你喜欢
      • 2021-02-14
      • 1970-01-01
      • 2023-04-02
      • 2014-06-24
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多