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';
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 |