关闭。这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。












想改善这个问题吗?更新问题,以便堆栈溢出为 on-topic

7年前关闭。



Improve this question




我是 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 级。

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

最佳答案

你可以这样做

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 演示

关于sql - Postgresql 触发器基于一列的值来更改或更新每一行中其他列的值。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20958569/

10-13 00:48