在oracle

时间:2017-07-17 02:33:31

标签: oracle triggers oracle-sqldeveloper

以下是我的表格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没有改变。为什么呢?

1 个答案:

答案 0 :(得分:1)

您的原始代码是设置了本地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;