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;
/

その後、「挿入前」トリガーを作成しようとしましたが、うまくいくと思いましたが、うまくいきませんでした。

誰でも私を正しい方向に向けることができますか?ありがとう!

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 に答える