我是Postgresql的新手学生。学生表中只有4列
id serial,
student_name varchar(50),
student_marks integer,
grade varchar(1)
现在我希望创建一个名为fill_grade_auto
的触发器(语言:pl / sql),这样根据student_marks
,等级将自动更新为A(对于90以上的标记),B(高于60但低于90)并且以C级休息。
每次插入或更新每行后都应触发此触发器。我尝试了不同的方法,但没有成功。
答案 0 :(得分:14)
你可以这样做
CREATE OR REPLACE FUNCTION set_grade()
RETURNS TRIGGER
AS $$
BEGIN
NEW.grade := CASE WHEN NEW.student_marks >= 90 THEN 'A'
WHEN NEW.student_marks BETWEEN 60 AND 89 THEN 'B'
ELSE 'C' END;
RETURN NEW;
END $$ LANGUAGE plpgsql;
CREATE TRIGGER set_grade_trigger
BEFORE INSERT OR UPDATE ON students
FOR EACH ROW
EXECUTE PROCEDURE set_grade();
注意:您可能需要调整CASE
中成绩的边界,因为您的问题在这个问题上有点含糊不清。如果逐字逐句阅读,90
的值不属于任何等级。因此,我冒昧地按照我的方式解释它(A: 90<=marks, B: 60<= marks<90, c: marks<60
)
这是 SQLFiddle 演示