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



---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
    (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])

Reply via email to