0

我的触发代码有问题(表突变等等!),我找不到问题所在。

基本上,我有一个表 SEMESTER(id_semester,semester_name,begin_date,end_date)。在插入一行时,我希望根据 begin_date 中的内容使用一个值更新学期名称。例如,如果 begin_date 是 '2000-01-01',我希望 term_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;
/

之后,我尝试制作一个“插入前”触发器,认为它会更好,但事实并非如此。

任何人都可以指出我正确的方向吗?谢谢!

4

2 回答 2

2

假设id_semester是主键,而不是UPDATE语句,您只想分配:new.semester_name

:new.semester_name := concat( sem, year );
于 2013-07-08T17:52:29.167 回答
0

突变表错误仅发生在“每一行”类型的触发器中,尝试将插入后触发器更改为“语句”类型

于 2013-07-08T18:37:43.170 回答