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_nameTBL_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;