2013-09-25 36 views
1

我遇到觸發器執行問題。我在下面的代碼中提供了一個觸發器。觸發器無法在Oracle SQL Developer上工作

create or replace 
TRIGGER abc_tr01 
    BEFORE INSERT 
    ON tablename 
    FOR EACH ROW 

BEGIN 
    UPDATE tablename 
    SET dtCreatedDate = SYSDATE 
    WHERE incidentid = (SELECT :NEW.incidentid 
          FROM DUAL ); 
END; 

該觸發假定的插入是在該表中進行之前更新tablename表在其中的列(dtCreatedDate),並且存儲SYSDATE 1。

但是,它無法更新dtCreatedDate字段。

我檢查了觸發器已啓用。它也在插入時被解僱。我通過在即時檢測到的觸發代碼中注入語法錯誤來檢查該錯誤。

我正在使用SQL Developer 3.0。

請幫忙。

+0

沒有必要發出在觸發體的'update'聲明如果'tablename'在觸發的'on'條款和'tablename'在'update'語句是一樣的。只需使用要爲其分配值的列的':new'限定符即可。 ':new.dtCreatedDate:= SYSDATE' –

+0

當它被解僱時,你肯定會得到一個「* table is mutating」錯誤。 –

回答

1

無需爲UPDATE聲明:

create or replace 
TRIGGER abc_tr01 
    BEFORE INSERT 
    ON tablename 
    FOR EACH ROW 
BEGIN 
    :new.dtCreatedDate := sysdate; 
END; 
/
+0

感謝您的幫助! –