Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

Solucion dada del trigger sólo para nuevos registros

La consigna pide que se actualice las edades de los clientes, en la tabla de clientes. Sin embargo con la solución dada:

DELIMITER //
CREATE TRIGGER TG_EDAD_CLIENTES_INSERT
BEFORE INSERT ON tb_cliente
FOR EACH ROW BEGIN
    SET NEW.EDAD = timestampdiff(YEAR, NEW.FECHA_NACIMIENTO, NOW());
END //

Lo hace sólo con el nuevo registro insertado. Probé haciendo un update sobre la misma tabla:

DELIMITER //
CREATE TRIGGER TG_EDAD_CLIENTES_INSERT
BEFORE INSERT ON tb_cliente
FOR EACH ROW BEGIN
    UPDATE tb_cliente 
    SET EDAD = timestampdiff(YEAR, FECHA_NACIMIENTO, NOW());
END //

pero me tira el error: "Error Code: 1442. Can't update table 'tb_cliente' in stored function/trigger because it is already used by statement which invoked this stored function/trigger."

Supongo que no se puede hacer un update sobre la misma tabla que se hace el insert. O hay otra manera de hacerlo.

2 respuestas

Hola Cristian, cómo va? :)) hay una manera de lograr el resultado deseado.

En lugar de intentar realizar un UPDATE directamente en la tabla tb_cliente, puedes utilizar un trigger AFTER INSERT para actualizar la edad de los clientes después de que se haya insertado un nuevo registro. Aquí te dejo un ejemplo de cómo podrías hacerlo:

DELIMITER //
CREATE TRIGGER TG_EDAD_CLIENTES_INSERT
AFTER INSERT ON tb_cliente
FOR EACH ROW
BEGIN
    UPDATE tb_cliente
    SET EDAD = timestampdiff(YEAR, NEW.FECHA_NACIMIENTO, NOW())
    WHERE DNI = NEW.DNI;
END //
DELIMITER ;

En este caso, el trigger se activará después de que se inserte un nuevo registro en la tabla tb_cliente, y actualizará la edad del cliente correspondiente utilizando la función timestampdiff.

Si este post te ayudó, por favor, marca como solucionado ✓.

Muchas gracias por responder, Erika Bellido Alarcon. Probé con ese código y me sigue dando el mismo error que no me deja hacer el update: "Error Code: 1442. Can't update table 'tb_cliente' in stored function/trigger because it is already used by statement which invoked this stored function/trigger."

Igual, por lo que veo en ese código, sigue haciendo lo mismo. SÓLO actualiza la edad del registro nuevo. La consigna dice, o yo entiendo esto, es que se deben actualizar las edades de los clientes, ya que el campo edad es fijo y queda desactualizado.