2013-07-08 43 views
0

我遇到觸發器代碼(表突變和更多!)的問題,並且我找不到 問題是什麼。使用觸發器自動更新表中的列

基本上,我有一個表SEMESTER(id_semester,semester_name,begin_date,end_date)。 在插入一行時,我希望semester_name的值更新爲 到begin_date中的值。例如,如果begin_date是'2000-01-01',我希望 semester_name的值爲W00(2000年冬季)。

我的第一個嘗試是寫一個'插入後'觸發器,由於表突變錯誤,這不起作用。這是它:

CREATE TRIGGER Test 
BEFORE INSERT ON Semester 
FOR EACH ROW 

DECLARE 
    sem   CHAR(1); 
    year  CHAR(2); 
BEGIN 
    -- begin_date is either 1, 5 or 9. 
    IF (EXTRACT(MONTH FROM :new.begin_date) = '1') THEN 
     saison := 'W'; 
    ELSIF (EXTRACT(MONTH FROM :new.begin_date) = '5') THEN 
     saison := 'S'; 
    ELSE 
     saison := 'F'; 
    END IF; 

    year := TO_CHAR(:new.date_debut, 'MM'); 

    UPDATE  Semester 
    SET   semester_name = CONCAT(sem, year) 
    WHERE  id_semester = :new.id_semester; 
END; 
/

之後,我試圖做一個'之前插入'觸發器,認爲它會更好,但它不會。

任何人都可以指出我正確的方向嗎? 謝謝!

回答

2

假設id_semester是主鍵,而不是UPDATE聲明,你只是要分配的:new.semester_name

:new.semester_name := concat(sem, year); 
0

的mutanting表發生錯誤只能用「每一行」之類的觸發器,試圖改變您的「聲明」類型的插入後觸發器