Trigger com datediff
Olá galera, sou novo com esse tipo de linguagem, vocês podem me tirar uma duvida? eu não sei se é possivel criar triggers com o DATEDIFF() (Na verdade nem sei criar triggers direito).
Eu preciso criar uma trigger que calcule o tempo entre o prazo de entrega e a data atual. esta é a tabela que ele deveria estar.
@edit
Detalhe, a diferença deve ser multiplicada pelo valor decimal "0.50" e deve entrar no campo multa_atraso.
E esse... bem, é o trigger que eu tentei criar... hahaha
Eu preciso criar uma trigger que calcule o tempo entre o prazo de entrega e a data atual. esta é a tabela que ele deveria estar.
@edit
Detalhe, a diferença deve ser multiplicada pelo valor decimal "0.50" e deve entrar no campo multa_atraso.
CREATE TABLE Emprestimo ( IdEmprestimo INT(11) PRIMARY KEY, prazo_entrega DATE, data_emprestimo DATE, multa_atraso DECIMAL(10,2), )
E esse... bem, é o trigger que eu tentei criar... hahaha
DELIMITER $$
CREATE TRIGGER tr_multa
after insert ON emprestimo
for each row
BEGIN
if datediff(curdate(),prazo_entrega) < 0 or datediff(curdate(),prazo_entrega) = 0 then
update emprestimo set multa_atraso = ('0.00');
elseif datediff(curdate(),prazo_entrega) > 0 then
update emprestimo set multa_atraso = (datediff(curdate(),prazo_entrega)*0.50);
end if;
END
$$
Arthur
Curtidas 0
Melhor post
Marcos P
17/11/2015
Dê uma olhada nesse exemplo de trigger de ( after ) insert no MySql.
Os dados do registro que está sendo inserido devem ser referenciado pelo alias NEW.
Declare uma variável para receber o prazo de entrega corrente e utilize a variavel na trigger.
Algo como :
Ajustando os tipos de dados à sua necessidade, deve funcionar.
Entendeu o "espírito da coisa" ?
Os dados do registro que está sendo inserido devem ser referenciado pelo alias NEW.
Declare uma variável para receber o prazo de entrega corrente e utilize a variavel na trigger.
Algo como :
BEGIN declare vPrazoEntrega integer; select datediff(curdate(), NEW.prazo_entrega) INTO vPrazoEntrega; if vPrazoEntrega <= 0 then :
Ajustando os tipos de dados à sua necessidade, deve funcionar.
Entendeu o "espírito da coisa" ?
GOSTEI 1
Mais Respostas
Arthur
17/11/2015
Hmm então quando essa váriavel foi declarada e entrou por esse Select.
Ela agora contem todos os valores que sairam no Datediff, mas para coloca-los na tabela de fato eu tenho que fazer algo como isso(dentro da trigger)?
digo igualar o campo da tabela a váriavel ( sei que soa confuso ) como insert into tabela(campo) values (variavel)
select datediff(curdate(), NEW.prazo_entrega) INTO vPrazoEntrega;
Ela agora contem todos os valores que sairam no Datediff, mas para coloca-los na tabela de fato eu tenho que fazer algo como isso(dentro da trigger)?
if vPrazoEntrega <= 0 then update emprestimo set new.multa_atraso = 0;
digo igualar o campo da tabela a váriavel ( sei que soa confuso ) como insert into tabela(campo) values (variavel)
GOSTEI 0
Marcos P
17/11/2015
Não entendi esse seu último post... e acho que não entendi nem seu post original !
vPrazoEntrega, recebe o valor de prazo_entrega para o registro que acabou de ser inserido ( after insert ).
O ( IF ) passa a ser feito a partir da variável e... é isso !
Se você deseja fazer alguma outra coisa, por favor, detalhe melhor sua necessidade.
vPrazoEntrega, recebe o valor de prazo_entrega para o registro que acabou de ser inserido ( after insert ).
O ( IF ) passa a ser feito a partir da variável e... é isso !
Se você deseja fazer alguma outra coisa, por favor, detalhe melhor sua necessidade.
GOSTEI 0