CREATE OR REPLACE FUNCTION public.fnc_busca_saldo_filiais( var_filial_stq integer, var_filial_pro integer, var_produto integer, var_almoxarifado integer, OUT var_qtd numeric) RETURNS SETOF numeric LANGUAGE 'plpgsql' COST 100 VOLATILE PARALLEL UNSAFE ROWS 1000 AS $BODY$ DECLARE var_sql text; r rpc_conexao_filial%ROWTYPE; RESULT record; var_select text; resultado_encontrado BOOLEAN := false; BEGIN FOR r IN EXECUTE('SELECT * FROM rpc_conexao_filial WHERE filial = '||var_filial_stq||' ORDER BY filial') LOOP var_sql := 'SELECT * FROM dblink('||''''||'host = '||r.host||' port = '||COALESCE(NULLIF(r.porta, 0), 5432)||' user = '||r.usuario||' dbname = '||r.database||' password = '||r.senha ||''''||', '||''''||'SELECT quantidade FROM stq_saldo_estoque_atual WHERE filial_stq = '||var_filial_stq||' AND almoxarifado = '||var_almoxarifado||' AND filial_pro = '||var_filial_stq||' AND produto = '||var_produto||' LIMIT 1'||''''||' ) AS resumo(quantidade NUMERIC)'; END LOOP; FOR RESULT IN EXECUTE(var_sql) LOOP var_qtd := RESULT.quantidade; resultado_encontrado := true; RETURN NEXT; END LOOP; IF NOT resultado_encontrado THEN var_qtd := 0.000000; RETURN NEXT; END IF; END; $BODY$; ALTER FUNCTION public.fnc_busca_saldo_filiais(integer, integer, integer, integer) OWNER TO postgres;