2014-01-06 3 views
7

저는 PostgreSQL의 초보자입니다. student_marks에 따라 등급이 자동으로 A (위 90마르크에 대한 업데이트됩니다 너무 fill_grade_auto 이름 : (PL/SQL 언어) 나는Postgresql 각 행의 다른 열의 값을 변경하거나 업데이트하기 위해 한 열의 값을 기준으로 트리거합니다.

id    serial, 
student_name varchar(50), 
student_marks integer, 
grade   varchar(1) 

가 지금은 트리거를 생성하고자하는 학생들 테이블 만 4 열이), B (60 이상 90 이하) 및 C 등급으로 휴식하십시오.

이 트리거는 각 행의 삽입 또는 업데이트 후마다 실행되어야합니다. 나는 다른 방법을 시도했지만 성공하지 못했습니다.

+0

일부 당신의 시도에서 코드 – iandotkelly

+5

좋은 질문과 좋은 답변 해주십시오 데모 SQLFiddle이다 - 도대체 왜이 닫혀을 ??? 그것은 정말로 도움이된다! –

답변

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)

+0

도움이 되었습니까? 질문에 대한 도움이 더 필요하십니까? – peterm

+0

정말 고마워요 !!! 그것은 단지 내가 pl/SQL을 배우는 데 정말로 열심히 노력해야한다는 것을 상기시켜줍니다. –

+0

고마워요! Stupeditors 가까운 좋은 질문 –

관련 문제