oracle触发器中的IF-ELSE语句

IF-ELSE statement inside trigger in oracle

这是我的 table、TB_KELUHAN

中的列
"IDKELUHAN" NUMBER(20,0) NOT NULL ENABLE, 
"NAMA" VARCHAR2(10 BYTE), 
"IDUNIT" NUMBER(10,0), 
"TGL_KELUHAN" DATE DEFAULT sysdate, 
"KELUHAN" VARCHAR2(200 BYTE), 
"STATUS" VARCHAR2(10 BYTE), 
"IDPEGAWAI" NUMBER(10,0), 
"TGL_SELESAI" DATE DEFAULT sysdate, 
"ID_JENISKELUHAN" NUMBER(5,0), 
 CONSTRAINT "TB_KELUHAN_PK" PRIMARY KEY ("IDKELUHAN")

我想要一个触发器,当一行的 STATUS 变为 'SELESAI' 时,它会将行的 TGL_SELESAI 列更新为 SYSDATE。这是我试过的触发器的文本:

TRIGGER SELESAI
AFTER UPDATE OF STATUS ON TB_KELUHAN
FOR EACH ROW
DECLARE 
   TGL_SELESAI DATE;
BEGIN
   IF :new.STATUS = 'SELESAI'
   THEN 
      TGL_SELESAI:=SYSDATE;
   END IF;
END;

当我将STATUS的值改为"SELESAI"时,对应的TGL_SELESAI并没有改变。为什么?

您的原始代码设置的是本地 PL/SQL 变量,而不是行的列,并且您创建的是 AFTER UPDATE 触发器,而不是 BEFORE UPDATE 触发器。试试这个:

CREATE OR REPLACE TRIGGER SELESAI
BEFORE UPDATE OF STATUS ON TB_KELUHAN
FOR EACH ROW
BEGIN
   IF :new.STATUS = 'SELESAI'
   THEN 
      :new.TGL_SELESAI := SYSDATE;
   END IF;
END;