2014-12-23 2 views
0

저는 PostgreSQL을 사용하고 있습니다. 학생들의 GPA를 최신 상태로 유지하는 방아쇠를 만들어야합니다. SQL 문을 반복하기 위해 r 변수를 선언했습니다. 그러나 Student 대신 다른 테이블의 필드를 사용할 수 없습니다. r.credits, r.grade. 이 변수 유형을 어떻게 선언해야합니까?다른 유형의 열이있는 테이블의 인스턴스를 선언하는 방법

DECLARE 
    r record 

그런 다음 당신이 select 성명에서 필요한 필드를 넣어 :

CREATE OR REPLACE FUNCTION updateGPA() RETURNS TRIGGER AS $$ 
    DECLARE 
    r Student; 
    total_credits INT; 
    temp INT; 
BEGIN 
    FOR r IN (SELECT s.sid, c.credits, t.grade FROM Student s, Course c, Take t WHERE t.cid = NEW.cid and t.sid = s.sid) 
    LOOP 
     total_credits = SUM(r.credits); 
     temp = temp + SUM(r.credits * r.grade); 
     UPDATE Student SET gpa = temp/total_credits WHERE Student.sid = r.sid; 
    END LOOP; 
    RETURN NEW; 
END; 
+0

사실, 집계 함수'sum()'은 일반 함수처럼 사용할 수 없습니다. –

답변

1

간단한 익명 유형 record을 사용하는 것입니다.

관련 문제