quinta-feira, 4 de dezembro de 2014

ERROR 1363: There is no OLD row in on INSERT trigger

Quadrado vermelho com a letra X dentro na cor branca.
Nesta semana o colega Glauber Hofman me pediu um apoio na criação de um trigger, ele estava tendo dificuldades na hora de inserir registros na tabela que o trigger estava vinculado, no entanto, o gatilho já havia compilado no banco de dados.

O erro apresentado pelo MySQL era:
ERROR 1363: There is no OLD row in on INSERT trigger

O trigger em questão "deveria" inserir na tabela de log os registros antigos (old) depois (after) da inserção (insert). Como mencionei, o trigger compilou sem problemas, só que ao momento em que um registro era inserido na tabela, o erro acima era apresentado.

O motivo do erro?


No insert não temos um valor antigo, somente o novo valor que será registrado, desta forma o banco de dados nos alerta através do erro 1363 que, não é possível se ter um valor antigo para um novo registro.

De forma semelhante, também podemos ter o erro:
ERROR 1363: There is no NEW row in on DELETE trigger

Neste formato, temos um trigger tentando inserir um registro novo após um delete, algo que não existe, afinal, o novo registro "sumiu".

A solução?


Para resolver o problema no caso do insert, troque o after por before, e o old, por new.

Já para o delete, use o before e, troque o new pelo old.

Se ainda ficou na dúvida, quer agradecer (me dar $$), poste seu comentário, terei o maior prazer em responder.

4 comentários: