2014-01-06 89 views
7

我在PostgreSQL是一个新手学生。我在学生表中只有4列PostgreSQL触发。

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

请提供您尝试一些代码 – iandotkelly

+5

很好的问题,很好的答案 - 到底为什么它是封闭的???这真的很有帮助! –

回答

11

你能做到这样

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

+0

有帮助吗?你的问题需要更多帮助吗? – peterm

+0

非常感谢您peterm !!!它只是提醒我,我需要真正努力学习pl/sql。 –

+0

谢谢! Stupeditors提出了很好的问题 –