2013-11-04 5 views
0

로그 테이블에 정보를 업데이트하거나 삽입하는 함수를 작성했습니다. 모든 쿼리는 약 100 개의 레코드를 반환해야하지만, 아래 함수는 항상 마지막 행만 업데이트하거나 삽입합니다.
END LOOP 앞에 RETURN NEXT을 넣어 두는 것이 좋지만 작동하지 않습니다.postgresql - 루프가 제대로 작동하지 않습니다.

CREATE OR REPLACE FUNCTION plugins.update_log() 
    RETURNS void AS 
$BODY$ 
DECLARE 
    rec record; 
BEGIN 
FOR rec IN 
    SELECT  na1_nr::integer, 
       CASE WHEN c.record_status_id::integer = 8 THEN c.niezainteresowany_powod::text ELSE ots.name::text END reason 
    FROM  temp_id c 
    LEFT JOIN plugins.outbounds_telcom_statuses ots ON (ots.telcom_status_id::integer=c.telcom_status_id::integer AND ots.outbound_id::integer = 33) 

    LOOP 

     UPDATE plugins.boss_release_log 
     SET  count = count::integer +1 
     WHERE na1_nr::integer = rec.na1_nr::integer 
     AND  reason::text = rec.reason::text; 

     IF found THEN 
      RETURN; 
     END IF; 

     BEGIN 
      INSERT INTO plugins.boss_release_log(na1_nr,reason,count) 
      VALUES (rec.na1_nr, rec.reason, 1); 
      RETURN; 
     EXCEPTION WHEN unique_violation THEN 

     END; 

    END LOOP; 

END; 
$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 
ALTER FUNCTION plugins.update_log() 
    OWNER TO ss0; 
+0

'RETURN'은 함수를 종료합니다. 루프를 계속하려면'RETURN'을 호출하지 마십시오. –

답변

0

함수의 끝으로 RETURN 문을 이동하십시오. 함수는 반드시 RETURN 문을 가지고 있어야하지만, 눌려지면 빠져 나옵니다 (설정 반환 함수의 경우 RETURN NEXT를 사용하지만 여기서는 적용 할 수 없습니다).

관련 문제