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;
'RETURN'은 함수를 종료합니다. 루프를 계속하려면'RETURN'을 호출하지 마십시오. –