Skip site navigation (1) Skip section navigation (2)

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@ (view raw or flat)
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

pgsql-general by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group