Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/08/2015, 10:03
grexit
 
Fecha de Ingreso: julio-2015
Mensajes: 8
Antigüedad: 9 años, 5 meses
Puntos: 0
Trigger After Update, capturar valores modificados.

Código MySQL:
Ver original
  1.  
  2. DECLARE cad VARCHAR(1000) DEFAULT "";
  3.  
  4. DECLARE v_col VARCHAR (50);
  5.  
  6. DECLARE  c_col_dispositivos CURSOR FOR
  7. SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'dispositivos';
  8.  
  9. OPEN c_col_dispositivos;
  10.  
  11. get_columns: LOOP
  12.  
  13.  FETCH c_col_dispositivos INTO v_col;
  14.  
  15.     IF OLD.v_col != NEW.v_col THEN
  16.  
  17.     SET cad = CONCAT(cad," ",v_col,":",OLD.v_col,":",NEW.v_col,";");
  18.  
  19.     END IF;
  20.  
  21. END LOOP get_columns;
  22.  
  23. CLOSE c_col_dispositivos;
  24.      
  25. INSERT INTO bitacora
  26. (operacion, usuario_gestion, permiso, tabla, campo_valor, fecha_movimiento)
  27. VALUES ('Update', 'user', 'permiso', 'dispositivos', cad, SYSDATE());
  28.  


Como ya he escrito en el título se trata de un disparador AFTER UPDATE. La operación que debe realizar es muy simple, almacenar los campos modificados de la tabla "dispositivos" así como sus anteriores valores y los nuevos en un sólo campo de la tabla "bitacora". Se me ha ocurrido hacer una consulta para obtener todos los campos de la tabla "dispositivos", recorrerlos y operar con ellos con OLD y NEW pero el invento no me ha funcionado, no me reconoce el VARCHAR con el nombre de la tabla como una columna de dispositivos. Qué solución tiene ¿?

thx