inserting/updating 列的触发器在 Oracle 中不起作用
Trigger for inserting/updating columns is not working in Oracle
我在 Oracle 中创建了一个 trigger
。我想要的是,无论是插入新行还是更新任何现有行,我都想根据某些条件分别 Insert/Update
特定列。
下面是我的触发器,但它给了我一些错误。
create or replace TRIGGER TRG_UPD_RRSOC_ZONAL_NAME
BEFORE UPDATE ON TBL_RRSOC_STORE_INFO
FOR EACH ROW
BEGIN
IF NEW.SLP_ZONAL_HEAD_NAME = 'ABC' then ZONE_NAME = 'North';
IF NEW.SLP_ZONAL_HEAD_NAME = 'XYZ 'then ZONE_NAME = 'South';
END;
怎么了,因为我得到的错误是:
Error(4,48): PLS-00103: Encountered the symbol "=" when expecting one of the following: := . ( @ % ;
假设 zone_name
是 TBL_RRSOC_STORE_INFO
table 中的一列,听起来您想要这样的东西。注意
- 对
:new
伪记录的引用需要以冒号 :
, 作为前缀
- 赋值运算符是
:=
而不是=
,
- 如果要更改
zone_name
列的值,可以将值分配给 :new.zone_name
IF
语句需要 END IF
。您也可以使用 ELSIF
分支而不是复制 `IF 语句。
所以触发器主体应该是这样的
BEGIN
IF :NEW.SLP_ZONAL_HEAD_NAME = 'ABC' then :new.ZONE_NAME := 'North'; end if;
IF :NEW.SLP_ZONAL_HEAD_NAME = 'XYZ' then :new.ZONE_NAME := 'South'; end if;
END;
或者更简洁地说,使用 case
语句而不是一系列 IF
语句
BEGIN
:new.zone_name := case :NEW.SLP_ZONAL_HEAD_NAME
when 'ABC' then 'North'
when 'XYZ' then 'South'
end;
END;
我在 Oracle 中创建了一个 trigger
。我想要的是,无论是插入新行还是更新任何现有行,我都想根据某些条件分别 Insert/Update
特定列。
下面是我的触发器,但它给了我一些错误。
create or replace TRIGGER TRG_UPD_RRSOC_ZONAL_NAME
BEFORE UPDATE ON TBL_RRSOC_STORE_INFO
FOR EACH ROW
BEGIN
IF NEW.SLP_ZONAL_HEAD_NAME = 'ABC' then ZONE_NAME = 'North';
IF NEW.SLP_ZONAL_HEAD_NAME = 'XYZ 'then ZONE_NAME = 'South';
END;
怎么了,因为我得到的错误是:
Error(4,48): PLS-00103: Encountered the symbol "=" when expecting one of the following: := . ( @ % ;
假设 zone_name
是 TBL_RRSOC_STORE_INFO
table 中的一列,听起来您想要这样的东西。注意
- 对
:new
伪记录的引用需要以冒号:
, 作为前缀
- 赋值运算符是
:=
而不是=
, - 如果要更改
zone_name
列的值,可以将值分配给:new.zone_name
IF
语句需要END IF
。您也可以使用ELSIF
分支而不是复制 `IF 语句。
所以触发器主体应该是这样的
BEGIN
IF :NEW.SLP_ZONAL_HEAD_NAME = 'ABC' then :new.ZONE_NAME := 'North'; end if;
IF :NEW.SLP_ZONAL_HEAD_NAME = 'XYZ' then :new.ZONE_NAME := 'South'; end if;
END;
或者更简洁地说,使用 case
语句而不是一系列 IF
语句
BEGIN
:new.zone_name := case :NEW.SLP_ZONAL_HEAD_NAME
when 'ABC' then 'North'
when 'XYZ' then 'South'
end;
END;