Olá amigos, estou tentando inserir dados em uma tabela através de uma função (que eu chamo de lancar_nota), a minha ideia é inserir o numero inicial, final e a empresa e então a função alimentaria o meu banco de dados automaticamente, por exemplo: SELECT lancar_nota(1,20,'LUCAS'); Essa função lançaria 20 notas na empresa LUCAS, o problema é que estou tendo os mesmos valores (o resultado está em anexo). Se eu executar a função manualmente várias vezes (ou seja SELECT lancar_nota(1,1,'LUCAS'), depois rodar novamente SELECT lancar_nota(2,2,'LUCAS') e assim por diante) eu obtenho valores diferentes (que é o meu objetivo), portanto eu presumo que a minha função está correta, eu acho. Por favor se alguém puder me ajudar, desde já eu agradeço. Segue abaixo o código da função escrito em PLPGSQL CREATE OR REPLACE FUNCTION public.lancar_nota( numero_inicial integer, numero_final integer, apelido character varying) RETURNS void AS $BODY$ DECLARE desconto numeric(10,2); val_cont numeric(10,2); BEGIN IF numero_final < numero_inicial THEN RAISE NOTICE 'Numero Final não pode ser maior que o inicial, FIM DO PROCESSAMENTO'; END IF; FOR X IN numero_inicial..numero_final LOOP desconto := public.gerar_valor(); -- Função para gerar valor de 0 a 1999,99 val_cont := public.gerar_valor(); IF desconto >= val_cont -- Desconto não pode ser maior que o valor contábil THEN desconto := 0.00; END IF; INSERT INTO public.notas_icms(numero, dia, mes, tipo, apelido_empresa, valor_contabil, serie, desconto) VALUES (X, public.escolher_dia(), public.escolher_mes(),'S', apelido, val_cont,1,desconto); -- a função escolher dia e mês, geram dias e meses aleatórios END LOOP; RETURN; END; PS: Sou novo no assunto ainda, estou aprendendo.