Postgresql触发器基于一列的值来更改或更新每行中其他列的值.

May*_*sql 11 sql postgresql triggers

我是Postgresql的新手学生.学生表中只有4列

id              serial,
student_name    varchar(50), 
student_marks   integer,
grade           varchar(1)
Run Code Online (Sandbox Code Playgroud)

现在我希望创建一个命名的触发器(语言:pl/sql)fill_grade_auto,根据student_marks该等级,等级将自动更新为A(对于90以上的标记),B(对于60以上但小于90)并且以C为基础年级.

应在每行插入或更新后触发此触发器.我尝试了不同的方法,但没有成功.

pet*_*erm 15

你可以这样做

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();
Run Code Online (Sandbox Code Playgroud)

注意:您可能需要调整成绩的边界CASE,因为您的问题在该主题上有点模棱两可.如果逐字逐句阅读,则价值90不属于任何等级.因此我冒昧地以我的方式解释它(A: 90<=marks, B: 60<= marks<90, c: marks<60)

这是SQLFiddle演示