Trigger com datediff

MySQL

17/11/2015

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.

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

Arthur

Curtidas 0

Melhor post

Marcos P

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 :

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

Arthur

17/11/2015

Hmm então quando essa váriavel foi declarada e entrou por esse Select.
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

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.
GOSTEI 0
POSTAR