1

私がやりたいことは、新入生の成績属性を管理することです。学生 ID と成績を含む挿入されたタプルの成績値が 9 未満または 12 を超える場合、値を NULL に変更します。同時に、挿入されたタプルがグレード null 値を持つ場合は、それを 9 に変更します。

次のコードの何が問題になっていますか?

CREATE TRIGGER R1
AFTER INSERT ON Students
FOR EACH ROW 
BEGIN

  UPDATE Students
     SET grade = NULL 
   WHERE grade < 9 OR grade > 12;

  UPDATE Students
     SET grade = 9 
   WHERE grade = NULL;

END;

INSERT が実行された直後に、Student テーブルに対して 2 つの UPDATE ステートメントを実行する必要があることに注意してください。ヌル値はグレード 9 に更新され、グレード > 9 または > 12 は NULL に更新されます。

4

2 に答える 2

2

= NULL2番目の条件をからに置き換える必要がありますIS NULL

UPDATE Students
     SET grade = 9 
   WHERE grade IS NULL;

= NULLとの証明IS NULLhttp ://sqlfiddle.com/#!5 / a51de / 1

その他の解決策:

http://sqlfiddle.com/#!5/78288/1

CREATE TRIGGER TStudents3
AFTER INSERT ON Students3
FOR EACH ROW
/* we check update conditions here */
WHEN  NEW.grade IS NULL
  OR  NEW.grade < 9
  OR  NEW.grade > 12
BEGIN

  UPDATE Students3
     SET grade =
       CASE
         WHEN grade IS NULL THEN 9
         /* actually you could drop this 2 lines, because a missing ELSE returns NULL: */
         WHEN grade < 9 OR grade > 12 THEN NULL
         ELSE grade
       END
   /* We just want to update the freshly inserted row, not all row! */
   WHERE  id = NEW.id;

END
于 2013-03-09T14:19:16.870 に答える