2013-07-08 3 views
0

У меня возникла проблема с кодом триггера (мутация таблицы и многое другое!), И я не могу найти , в чем проблема.Автоматическое обновление столбца в таблице с помощью триггера

В принципе, у меня есть таблица SEMESTER (id_semester, semester_name, begin_date, end_date). При вставке строки я хочу, чтобы semester_name обновлялось со значением в соответствии с до того, что находится в begin_date. Например, если start_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 происходит только с «каждой строки» типа триггеров, попробуйте изменить ваш триггер после вставки для типа «заявка»

Смежные вопросы