update - bucle a través de columnas en el disparador mysql
trigger mysql w3schools (1)
¿Es posible recorrer todos los nombres de columna mientras está dentro de un desencadenador?
Escenario: para registrar todas las columnas de una tabla que se han modificado. Si algunos valores no cambiaron, no registre esos.
DROP TRIGGER IF EXISTS t_before_update_test;
DELIMITER $$
CREATE TRIGGER t_before_update_test
BEFORE UPDATE ON test
FOR EACH ROW
BEGIN
-- Loop here for all columns, not just col1
IF OLD.col1 <> NEW.col1 THEN
INSERT INTO change_logs(
log_on, user_id,
table_name, colum_name,
old_data, new_data
) VALUES (
UNIX_TIMESTAMP(NOW()), ''0'',
''test'', ''col1'',
OLD.col1, NEW.col1
);
END IF;
-- process looping all columns
-- col1, col2, ... should be dynamic per loop
END $$
Este es un ejemplo de copia de trabajo, donde ahora necesito recorrer todas las columnas disponibles en VIEJO o NUEVO.
sí, se puede agregar un cursor dentro de un disparador para recorrer las columnas. aquí hay un par de enlaces:
mysql, iterar a través de los nombres de las columnas
https://dba.stackexchange.com/questions/22925/mysql-loop-over-cursor-results-ends-ahead-of-schedule
por experiencia, podría ser más fácil crear un procedimiento almacenado que realice el bucle y se inserte y lo llame desde el disparador