-- DROP FUNCTION par.get_responsaveis(varchar, date, date, date, varchar); CREATE OR REPLACE FUNCTION par.get_responsaveis(i_muncod character varying, i_datainiciovigencia date, i_datafimvigencia date, i_datafimpc date, i_tipoprograma character varying ) RETURNS TABLE(_rrpid integer, _cpf character varying, _nomeprefeito character varying, _dtiniciomandato date, _dtfimmandato date, _naturezainteresse character varying ) LANGUAGE plpgsql AS $$ DECLARE responsavel record; BEGIN FOR responsavel IN( WITH prefeitos as( SELECT rrpid, rrpdtiniciomandato, rrpdtfimmandato, usucpf, rrpnomeprefeito, trim(par.naturezainteresse_v2( rrpdtiniciomandato, rrpdtfimmandato, i_datainiciovigencia, i_datafimvigencia, i_tipoprograma) ) as naturezainteresse FROM par.rollresponsaveisprefeitos WHERE muncod in(i_muncod) and (i_datainiciovigencia between rrpdtiniciomandato and rrpdtfimmandato or i_datafimpc between rrpdtiniciomandato and rrpdtfimmandato ) UNION SELECT * FROM ( SELECT rrpid, rrpdtiniciomandato, rrpdtfimmandato, usucpf, rrpnomeprefeito, trim(par.naturezainteresse_v2( rrpdtiniciomandato, rrpdtfimmandato, i_datainiciovigencia, i_datafimvigencia, i_tipoprograma)) as naturezainteresse FROM par.rollresponsaveisprefeitos where muncod in(i_muncod) ) AS subquery WHERE TRIM(subquery.naturezainteresse) IN('Atual Gestor', 'Atual Gestor /Responsável /Corresponsável', 'Atual Gestor /Corresponsável') )SELECT DISTINCT rrpid, rrpdtiniciomandato, rrpdtfimmandato, usucpf, rrpnomeprefeito, naturezainteresse FROM prefeitos ) LOOP _rrpid := responsavel.rrpid; _cpf := responsavel.usucpf; _nomeprefeito := responsavel.rrpnomeprefeito; _dtiniciomandato := responsavel.rrpdtiniciomandato; _dtfimmandato := responsavel.rrpdtfimmandato; IF TRIM(responsavel.naturezainteresse) = 'Ex-dirigente' THEN _naturezainteresse := 'Responsável'; ELSE _naturezainteresse := TRIM(responsavel.naturezainteresse); END IF; return next; END LOOP; END; $$;