Endless For Loop in an insert trigger

From: Luis Agostinho <luis(dot)agostinho(at)consumo-pt(dot)coop>
To: "'pgsql-general(at)postgresql(dot)org'" <pgsql-general(at)postgresql(dot)org>
Subject: Endless For Loop in an insert trigger
Date: 2004-06-24 17:23:25
Message-ID: bad9b0a59fe63185e7fbfd3a83412c7540db0ceb@
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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';

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Hunter Hillegas 2004-06-24 17:35:11 Possible To Modify Part of String in Certain Rows?
Previous Message John Sidney-Woollett 2004-06-24 16:29:10 Re: langauges, locales, regex, LIKE