2017-07-17 129 views
0

這裏是列在我的表,TB_KELUHANif-else語句內觸發在Oracle

"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") 

我希望有一個觸發器,將更新行的TGL_SELESAI列SYSDATE,當行的狀態變爲「SELESAI」。這裏是我試過的觸發器的文本:

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; 

當我改變狀態的值設置爲「SELESAI」,相應的TGL_SELESAI沒有改變。爲什麼?

+0

我從更新後改爲更新之前,仍然沒有在TGL_SELESAI – Apuranic

回答

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; 
+0

變化仍然在TGL_SELESAI不會改變。觸發器代碼是否錯誤? – Apuranic

+0

謝謝它的作品! :) – Apuranic