2014-01-06 88 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提出了很好的問題 –