Endless For Loop in an insert trigger - Mailing list pgsql-general
From | Luis Agostinho |
---|---|
Subject | Endless For Loop in an insert trigger |
Date | |
Msg-id | bad9b0a59fe63185e7fbfd3a83412c7540db0ceb@ Whole thread Raw |
Responses |
Re: Endless For Loop in an insert trigger
|
List | pgsql-general |
Hello I?m using this function to be executed within an after insert trigger, but the part of code above wich is "painted" by blue gets in an endless loop. I could use some help Thanks in advance Luis Agostinho -----------------------,,----------------------- CREATE FUNCTION fnc_copia_tbl_emitidos() RETURNS opaque AS ' DECLARE v_emitidos_trimestre RECORD; ano_anterior VARCHAR; ano_actual VARCHAR; ano_seguinte VARCHAR; cont INTEGER; trimestre INTEGER; v_ramo RECORD; v_emitidos_objectivos RECORD; v_angar RECORD; v_familia RECORD; v_realizado RECORD; v_r tbl_emitidos.prem_come2%TYPE; v_realizado_cobrado RECORD; v_r_c tbl_emitidos.prem_come2%TYPE; query_update TEXT; query_update_cobrados TEXT; BEGIN ano_anterior := date_part(''year'',current_date)-1; ano_actual := date_part(''year'',current_date); ano_seguinte := date_part(''year'',current_date)+1; SELECT INTO v_emitidos_trimestre recibo,vencimento FROM tbl_emitidos WHERE recibo = NEW.recibo AND to_date(vencimento,''YYYY-MM-DD'') > ano_anterior||''-12-31''; IF NOT FOUND THEN RETURN NULL; ELSE SELECT INTO trimestre EXTRACT (QUARTER FROM to_date(v_emitidos_trimestre.vencimento,''YYYY-MM-DD'')); EXECUTE ''UPDATE '' || '' tbl_emitidos '' || '' SET '' || '' trimestre '' || '' = '' || trimestre||ano_actual || '' WHERE '' || '' recibo '' || '' = '' || quote_literal(v_emitidos_trimestre.recibo); END IF; --OBJECTIVOS FOR v_ramo IN SELECT id,familia_objectivos FROM tbl_ramo LOOP FOR v_emitidos_objectivos IN SELECT recibo,ramo FROM tbl_emitidos WHERE (familia ='''' OR familia ISNULL) AND date_part(''year'',vencimento) = date_part(''year'',current_date) LOOP IF NOT FOUND THEN RETURN NULL; ELSE IF v_ramo.id = v_emitidos_objectivos.ramo THEN EXECUTE ''UPDATE '' || '' tbl_emitidos '' || '' SET '' || '' familia '' || '' = '' || quote_literal(v_ramo.familia_objectivos) || '' WHERE '' || '' recibo '' || '' = '' || quote_literal(v_emitidos_objectivos.recibo); END IF; END IF; END LOOP; END LOOP; FOR v_angar IN SELECT DISTINCT angar FROM tbl_login LOOP FOR v_familia IN SELECT id FROM tbl_familia_objectivos LOOP v_r = 0; FOR v_realizado IN SELECT recibo,prem_come2 FROM tbl_emitidos WHERE angar = v_angar.angar AND familia = v_familia.id AND tipo = 5 AND (estado !=2 OR estado !=3 OR estado !=4 OR estado !=5 OR estado !=6 OR estado !=7 OR estado !=8) LOOP IF NOT FOUND THEN RETURN NULL; ELSE v_r = v_r + v_realizado.prem_come2; END IF; END LOOP; IF v_r <> 0 THEN EXECUTE '' UPDATE '' || '' tbl_objectivos '' || '' SET '' || '' valor_realizado '' || '' = '' || v_r || '' WHERE '' || '' balcao '' || '' = '' || quote_literal(v_angar.angar) || '' AND '' || '' familia '' || '' = '' || quote_literal(v_familia.id); RAISE NOTICE ''VAI RETORNAR EXIT''; END IF; END LOOP; END LOOP; RETURN NULL; END; ' LANGUAGE 'plpgsql';
pgsql-general by date: