2013-11-04 136 views
0

我寫了函數來更新或插入到日誌表中的一些信息。 每個查詢應該返回大約100條記錄,但下面的函數總是更新或只插入最後一行。
我應該把RETURN NEXTEND LOOP之前,但它不工作。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的設置返回函數,但在這裏不適用)。