2014-04-07 3 views
-1

Postgres 9.3을 사용합니다. 함수의 결과를 삽입 할 수 있습니까? 함수 결과 삽입

CREATE FUNCTION apply_func() RETURNS TRIGGER AS $$ 
DECLARE gwa char(9); 
BEGIN 
gwa:=(select gwa_calc(new.studid)); 
IF (SELECT noGrade_check(new.studid)) THEN 
RAISE NOTICE 'ACCEPTED: GRADES COMPLETE'; 
    IF (SELECT yrlvl_check(new.studid)) THEN 
    RAISE NOTICE 'ACCEPTED:YRLVL_CHECK'; 
    IF (SELECT fail_check1(new.studid, new.sch_name)) THEN 
     RAISE NOTICE 'ACCEPTED:FAIL_CHECK'; 
     IF (SELECT semunit_check1(new.studid)) THEN 
      RAISE NOTICE 'ACCEPTED:UNIT_CHECK'; 
      IF (SELECT gwa_check(new.studid, new.sch_name)) THEN 
       RAISE NOTICE 'ACCEPTED:GWA_CHECK'; 
       INSERT INTO apply(studid, sch_name, gpa) 
       VALUES (new.studid, new.sch_name, gwa); 
       RETURN NEW; 
      ELSE 
       RAISE NOTICE 'DECLINED:GPA_CHECK'; 
       RETURN NULL; 
      END IF; 
     ELSE 
      RAISE NOTICE 'DECLINED:UNIT_CHECK'; 
      RETURN NULL; 
     END IF; 
    ELSE 
     RAISE NOTICE 'DECLINED:FAIL_CHECK'; 
     RETURN NULL; 
    END IF; 
    ELSE 
    RAISE NOTICE 'DECLINED:YRLVL_CHECK'; 
     RETURN NULL; 
    END IF; 
ELSE 
RAISE NOTICE 'DECLINED: NULL GRADE EXISTS'; 
    RETURN NULL; 
END IF; 

END; 
$$ LANGUAGE plpgsql; 

CREATE TRIGGER apply_trig 
BEFORE INSERT ON apply 
FOR EACH ROW EXECUTE PROCEDURE apply_func(); 

내가 자동으로 new.studid, new.sch_name 및 장학금에 필요한 다른 모든 요구 사항이 충족 된 후 기능 gwa_calc(new.studid)의 결과를 삽입 할 :

나는이 시도.

어떻게하면됩니까?

+0

어떻게이 구조가 호출 될까요? – frlan

답변

1

는 다양한 방법으로 코드를 단순화 :

CREATE FUNCTION apply_func() 
    RETURNS trigger AS 
$func$ 
BEGIN 

IF NOT noGrade_check(NEW.studid) THEN 
    RAISE NOTICE 'DECLINED: NULL GRADE EXISTS'; 
ELSIF NOT yrlvl_check(NEW.studid) THEN 
    RAISE NOTICE 'DECLINED:YRLVL_CHECK'; 
ELSIF NOT fail_check1(NEW.studid, new.sch_name) THEN 
    RAISE NOTICE 'DECLINED:FAIL_CHECK'; 
ELSIF NOT semunit_check1(NEW.studid) THEN 
    RAISE NOTICE 'DECLINED:UNIT_CHECK'; 
ELSIF NOT gwa_check(NEW.studid, NEW.sch_name) THEN 
    RAISE NOTICE 'DECLINED:GPA_CHECK'; 
ELSE 
    NEW.gpa := gwa_calc(NEW.studid); 
    RETURN NEW; 
END IF; 

RETURN NULL; 

END; 
$func$ LANGUAGE plpgsql; 

INSERT 당신 RETURN NEW만큼 자동으로 발생합니다. 그것을 복제하지 마십시오. 그 결과 무한 루프가됩니다.

테스트의 논리를 뒤집어서 모든 부정을 단순화하고 삭제할 수 있습니다. 이 모든 고지가 필요하지 않은 경우,이를 더 단순화 할 수 있습니다.