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
Pergunta
lucasiigd
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.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.