Fórum Duvida para criar trigger em pl/sql #414336
20/03/2012
0
Boa noite pessoal, estou iniciando com pl/sql e estou com uma dúvida , eu queria fazer o seguinte:
Eu cadastro um pagamento
Depois que esse pagamento for inserido eu crio as parcelas referente a quantidade de parcelas escolhida no cadastro do pagamento e cada parcela fica para um mes contando apartir do proximo(isso eu ainda não consegui fazer).
O que eu fiz está dando erro alguém poderia me ajudar?
CREATE OR REPLACE TRIGGER inserir_parcelas
AFTER INSERT ON PAGAMENTOS
for each row
DECLARE
quantidade NUMBER:=0;
pagamento NUMBER:=0;
banco NUMBER:=0;
cliente NUMBER:=0;
status NUMBER:=1;
valores NUMBER:=0;
i NUMBER:=0;
BEGIN
select quantidade_parcelas, codigo_pagamento, valor, codigo_banco, codigo_cliente into quantidade,codigo_pagamento,valor_total,banco,cliente from pagamentos
while (i<quantidade) loop
insert into parcelas(CODIGO_PAGAMENTO,CODIGO_PARCELAS,QUANTIDADE_PARCELAS,SUB_TOTAL,VALOR_PARCELA,CODIGO_BANCO,CODIGO_CLIENTE,COD_STATUS) values (pagamento,i,quantidade,(valores/quantidade),(valores/quantidade),banco, cliente, status)
end loop;
end;
grata pela atenção de Vocês
Eu cadastro um pagamento
Depois que esse pagamento for inserido eu crio as parcelas referente a quantidade de parcelas escolhida no cadastro do pagamento e cada parcela fica para um mes contando apartir do proximo(isso eu ainda não consegui fazer).
O que eu fiz está dando erro alguém poderia me ajudar?
CREATE OR REPLACE TRIGGER inserir_parcelas
AFTER INSERT ON PAGAMENTOS
for each row
DECLARE
quantidade NUMBER:=0;
pagamento NUMBER:=0;
banco NUMBER:=0;
cliente NUMBER:=0;
status NUMBER:=1;
valores NUMBER:=0;
i NUMBER:=0;
BEGIN
select quantidade_parcelas, codigo_pagamento, valor, codigo_banco, codigo_cliente into quantidade,codigo_pagamento,valor_total,banco,cliente from pagamentos
while (i<quantidade) loop
insert into parcelas(CODIGO_PAGAMENTO,CODIGO_PARCELAS,QUANTIDADE_PARCELAS,SUB_TOTAL,VALOR_PARCELA,CODIGO_BANCO,CODIGO_CLIENTE,COD_STATUS) values (pagamento,i,quantidade,(valores/quantidade),(valores/quantidade),banco, cliente, status)
end loop;
end;
grata pela atenção de Vocês
Fernanda Olimpio
Curtir tópico
+ 0
Responder
Posts
20/03/2012
Diego Lusa
Olá Fernanda.
Você deve utilizar uma construção semelhante a abaixo:
CREATE OR REPLACE TRIGGER inserir_parcelas
AFTER INSERT ON PAGAMENTOS REFERENCING OLD AS old NEW AS new FOR EACH ROW
DECLARE
i NUMBER;
data DATE;
BEGIN
i:= 0;
data:= <informe a data inicial>
while (i<new.quantidade) loop
insert into parcelas(CODIGO_PAGAMENTO,CODIGO_PARCELAS,QUANTIDADE_PARCELAS,SUB_TOTAL,VALOR_PARCELA,CODIGO_BANCO,CODIGO_CLIENTE,COD_STATUS, <CAMPO_DATA>)
values (new.pagamento,i,new.quantidade,(new.valores/new.quantidade),(new.valores/new.quantidade),new.banco, new.cliente, 1,data);
i:= i+ 1;
data:=data + 30;
end loop;
end;
Você deve utilizar uma construção semelhante a abaixo:
CREATE OR REPLACE TRIGGER inserir_parcelas
AFTER INSERT ON PAGAMENTOS REFERENCING OLD AS old NEW AS new FOR EACH ROW
DECLARE
i NUMBER;
data DATE;
BEGIN
i:= 0;
data:= <informe a data inicial>
while (i<new.quantidade) loop
insert into parcelas(CODIGO_PAGAMENTO,CODIGO_PARCELAS,QUANTIDADE_PARCELAS,SUB_TOTAL,VALOR_PARCELA,CODIGO_BANCO,CODIGO_CLIENTE,COD_STATUS, <CAMPO_DATA>)
values (new.pagamento,i,new.quantidade,(new.valores/new.quantidade),(new.valores/new.quantidade),new.banco, new.cliente, 1,data);
i:= i+ 1;
data:=data + 30;
end loop;
end;
Responder
Gostei + 0
20/03/2012
Fernanda Olimpio
Muito Obrigada Diego ,consegui resolver meu problema.
Bom vai ai o código
CREATE OR REPLACE TRIGGER INSERIR_PARCELAS
AFTER INSERT ON PAGAMENTOS REFERENCING OLD AS old NEW AS new FOR EACH ROW
DECLARE
i NUMBER;
data DATE;
quantidade NUMBER;
BEGIN
i:= 1;
data:=SYSDATE;
quantidade := :new.QUANTIDADE_PARCELAS;
while (i< quantidade+1) loop
insert into parcelas(CODIGO_PAGAMENTO,CODIGO_PARCELAS,QUANTIDADE_PARCELAS,SUB_TOTAL,VALOR_PARCELA,CODIGO_BANCO,CODIGO_CLIENTE,COD_STATUS,DATA_VENCIMENTO)
values (:new.CODIGO_PAGAMENTO,i,:new.QUANTIDADE_PARCELAS,(:new.VALOR/:new.QUANTIDADE_PARCELAS),(:new.VALOR/:new.QUANTIDADE_PARCELAS),:new.CODIGO_BANCO,:new.CODIGO_CLIENTE, 1,data);
i:= i+ 1;
data:=ADD_MONTHS(data,1);
end loop;
end;
Obrigado Diego
Bom vai ai o código
CREATE OR REPLACE TRIGGER INSERIR_PARCELAS
AFTER INSERT ON PAGAMENTOS REFERENCING OLD AS old NEW AS new FOR EACH ROW
DECLARE
i NUMBER;
data DATE;
quantidade NUMBER;
BEGIN
i:= 1;
data:=SYSDATE;
quantidade := :new.QUANTIDADE_PARCELAS;
while (i< quantidade+1) loop
insert into parcelas(CODIGO_PAGAMENTO,CODIGO_PARCELAS,QUANTIDADE_PARCELAS,SUB_TOTAL,VALOR_PARCELA,CODIGO_BANCO,CODIGO_CLIENTE,COD_STATUS,DATA_VENCIMENTO)
values (:new.CODIGO_PAGAMENTO,i,:new.QUANTIDADE_PARCELAS,(:new.VALOR/:new.QUANTIDADE_PARCELAS),(:new.VALOR/:new.QUANTIDADE_PARCELAS),:new.CODIGO_BANCO,:new.CODIGO_CLIENTE, 1,data);
i:= i+ 1;
data:=ADD_MONTHS(data,1);
end loop;
end;
Obrigado Diego
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)