3
respostas

Exercício mal estruturado

O exercício propõe a construção de uma trigger que após a inclusão de um novo registro, os valores das idades dos clientes, que já estavam cadastrados e dos novos clientes, iriam se atualizar para a idade atual. Porém, a resposta correta é uma trigger que funciona antes da inclusão do novo registro, ou seja, BEFORE INSERT. Só que uma trigger before insert só vai atualizar os novos registros, os antigos ficarão como eram antes. Descobri isso após pesquisar na internet, porquê durante a aula não se falou sobre o BEFORE INSERT. Então a resposta do exercício está mal construída, pois não são todos os registros que serão atualizados, serão somente os novos.

3 respostas

Olá Marcelo!

Não sei se você voltou a ver esse exercicio novamente, porque ele foi corrigido, e é justamente como você falou. A resposta do exercício agora está dessa forma:

DELIMITER //

CREATE TRIGGER TG_CLIENTES_IDADE_INSERT BEFORE INSERT ON CLIENTES

FOR EACH ROW

BEGIN

SET NEW.IDADE = timestampdiff(YEAR, NEW.DATA_NASCIMENTO, NOW());

END//

"Note que esta resposta usa uma forma não mostrada no curso.

O BEFORE INSERT mostra que o processo vai ser executado antes do INSERT.

Neste caso todos os registros serão atualizados. Não usamos o UPDATE e sim o SET diretamente.

O NEW representa o novo registro que será incluído".

Espero que tenha ajudado!

Olá, Jonilson. A dúvida estava na afirmação 'Neste caso todos os registros serão atualizados. '. Ela dá a entender que todos os registros do banco serão atualizados, os novos registros e os antigos. Mas na verdade só os novos serão atualizados. Pra atualizar os antigos eu precisaria fazer um update antes da trigger. Então o correto seria 'Neste caso os novos registros serão atualizados antes de serem inseridos no banco. '.

Olá Marcelo, tudo bem? Peço desculpas pela demorar em ti responder novamente! É verdade, de acordo como estava apenas os novos registros seriam atualizados, já corrigimos a atividade!

Obrigado e bons estudos!