Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql触发器基于一列的值来更改或更新每行中另一列的值。_Sql_Postgresql_Triggers - Fatal编程技术网

Postgresql触发器基于一列的值来更改或更新每行中另一列的值。

Postgresql触发器基于一列的值来更改或更新每行中另一列的值。,sql,postgresql,triggers,Sql,Postgresql,Triggers,我是Postgresql的一名新生。我在学生表中只有4列 id serial, student_name varchar(50), student_marks integer, grade varchar(1) 现在,我希望创建一个名为fill\u grade\u auto的触发器(语言:pl/sql),以便根据student\u分数,分数将自动更新为a(90分以上),B(60分以上但90分以下),其余为C级 此触发器应在每行的每次插入

我是Postgresql的一名新生。我在学生表中只有4列

id              serial,
student_name    varchar(50), 
student_marks   integer,
grade           varchar(1)
现在,我希望创建一个名为
fill\u grade\u auto
的触发器(语言:pl/sql),以便根据
student\u分数
,分数将自动更新为a(90分以上),B(60分以上但90分以下),其余为C级

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

你可以这样做

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();

注意:您可能需要调整
案例
中的分数边界,因为您的问题在主题上有点含糊不清。如果逐字阅读,
90
的值不属于任何等级。因此,我冒昧地用我自己的方式来解释它(
A:90请包含您尝试的一些代码好问题和好答案-为什么它会关闭???它真的很有用!我已经标记为mod干预以尝试重新打开它的帮助?您的问题需要更多帮助吗?非常感谢peterm!!!它只提醒我需要在learni上下功夫ng pl/sql。谢谢!好问题