必须声明标识符 '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;```
- 如果您要在触发器主体中引用
:new
伪记录,则需要以冒号作为前缀。
cities
上的触发器通常无法查询 cities
table。在这种情况下,您似乎想要修改触发触发器的行中的数据,因此您只想更新 :new
伪记录。
- 由于您要修改导致触发器触发的行,因此您希望它成为
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;
我正在尝试声明一个 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;```
- 如果您要在触发器主体中引用
:new
伪记录,则需要以冒号作为前缀。 cities
上的触发器通常无法查询cities
table。在这种情况下,您似乎想要修改触发触发器的行中的数据,因此您只想更新:new
伪记录。- 由于您要修改导致触发器触发的行,因此您希望它成为
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;