Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] triggers para muchas tablas

Estas en el tema de triggers para muchas tablas en el foro de Mysql en Foros del Web. Hola a todos Estoy teniendo problemas con los triggers pues apenas me entero que existen y no les llego a entender. Estoy haciendo estos trigger ...
  #1 (permalink)  
Antiguo 11/07/2014, 16:43
 
Fecha de Ingreso: enero-2014
Mensajes: 17
Antigüedad: 10 años, 10 meses
Puntos: 0
triggers para muchas tablas

Hola a todos

Estoy teniendo problemas con los triggers pues apenas me entero que existen y no les llego a entender.

Estoy haciendo estos trigger para llevar una bitacora de 22 tablas quiero que se registre una bitacora cada vez que se inserte, actualice o se borre algun registro en cualquiera de estas 22 tablas.
Mi primer trigger es este:
Código SQL:
Ver original
  1. CREATE TRIGGER bitacora after INSERT ON carrera1 FOR each ROW
  2. INSERT INTO bitacora(host, usuario, operacion, modificado, tabla)
  3. VALUES(NEW.clave,NEW.campo1,NEW.campo2,NEW.campo3, now())

Me perdi con la sintaxis del caso del delete y el update, ya inserte un codigo pero no me manda errores de syntaxis para las dos operaciones que me faltan.

El caso es que son 22 tablas y segun el articulo que encontre se tiene que hacer otros trigger para cada tabla.
Asi que queria preguntar si hay una manera mas facil con los triggers

SAludos y gracias por la atencion.

Última edición por gnzsoloyo; 11/07/2014 a las 16:49
  #2 (permalink)  
Antiguo 11/07/2014, 16:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: triggers para muchas tablas

Cita:
Estoy haciendo estos trigger para llevar una bitacora de 22 tablas quiero que se registre una bitacora cada vez que se inserte, actualice o se borre algun registro en cualquiera de estas 22 tablas.
...
El caso es que son 22 tablas y segun el articulo que encontre se tiene que hacer otros trigger para cada tabla.
Asi que queria preguntar si hay una manera mas facil con los triggers
Los triggers se definen sobre eventos de una única tabla, por lo que si tienes 22 tablas, y quieres controlar los tres eventos.. son 66 triggers. Al menos en MYSQL.

La verdad es que lo que planteas no tiene sentido, ni se hace de ese modo. Cuando quieres hacer un seguimiento de ese tipo lo que haces es crear el insert de la bitácora, en la misma conexión y subsiguiente a la accion sobre la tabla.
¿A qué me refiero?
Bueno, a que si haces un INSERT sobre la tabla "A", luego de la ejecución exitosa, insertas inmediatamente los datos que quieres poner en la bitácora, y en el mismo ciclo de proceso programado.

la verdad es que no tiene mucho sentido tampoco lo que quieres, porque en realidad estarías recargando la base (y una única tabla) con el doble de movimientos de datos...

¿Para que quieres hacer eso?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 11/07/2014, 17:06
 
Fecha de Ingreso: enero-2014
Mensajes: 17
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: triggers para muchas tablas

Hola gnzsoloyo gracias por responder.

Veras no me quería extender tanto con detalles pero pues aquí van. La cosa es que tengo que hacer un script para conectar 2 sistemas ajenos a los cuales no tenemos acceso y no se pretende que se nos de al menos a uno de ellos, así que no podemos meternos tanto con el código fuente para hacer esto desde un principio en un insert, así que tenemos que trabajar con los que se nos da, así que me encontré con estos trigger y me pareció muy bien para llevar una bitácora que mas adelante se pretende hacer otras consultas a la base de datos. Solo tenemos acceso a la base de datos prácticamente para realizar estos reportes.

En groso modo esa es la situación por la que recurro a este método de los trigger queira ahorrarme estos detalles, pero tal vez a alguno le pueda servir.

Saludos y de nuevo gracias
  #4 (permalink)  
Antiguo 14/07/2014, 11:56
 
Fecha de Ingreso: enero-2014
Mensajes: 17
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: triggers para muchas tablas

hola a todos de nuevo

Ya casi tengo mis triggers aqui pero me salio un detalle al dar de alta estos triggers y al querer hacer las acciones insert, update y delete en las tablas que puse los triggers me sale este error:


Estos son los triggers que ya di de alta en una tabla:
Código:
CREATE TRIGGER `bitacorainsert` AFTER INSERT ON `ps_address`
 FOR EACH ROW insert into bitacora(host, usuario, operacion, modificado, tabla) values(new.id_address,new.id_country,new.id_state,new.id_customer,new.id_manufacturer,new.id_supplier,new.id_warehouse,new.alias,new.company,new.lastname,new.firstname,new.address1,new.address2,new.postcode,new.city,new.other,new.phone,new.phone_mobile,new.vat_number,new.dni,new.date_add,new.date_upd,new.active,new.deleted, now())
Código:
CREATE TRIGGER `delete_ps_adress` AFTER DELETE ON `ps_address`
 FOR EACH ROW insert into bitacora(host, usuario, operacion, modificado, tabla) values(old.id_address,old.id_country,old.id_state,old.id_customer,old.id_manufacturer,old.id_supplier,old.id_warehouse,old.alias,old.company,old.lastname,old.firstname,old.address1,old.address2,old.postcode,old.city,old.other,old.phone,old.phone_mobile,old.vat_number,old.dni,old.date_add,old.date_upd,old.active,old.deleted, now())
Código:
CREATE TRIGGER `update_ps_address` AFTER UPDATE ON `ps_address`
 FOR EACH ROW insert into bitacora(host, usuario, operacion, modificado, tabla) values(old.id_address,old.id_country,old.id_state,old.id_customer,old.id_manufacturer,old.id_supplier,old.id_warehouse,old.alias,old.company,old.lastname,old.firstname,old.address1,old.address2,old.postcode,old.city,old.other,old.phone,old.phone_mobile,old.vat_number,old.dni,old.date_add,old.date_upd,old.active,old.deleted, now())
Estuve viendo de que se trataba el error que me sale y por lo que vi era por que no coincidia el numero de campos pero ya lo verifique varias veces y son el mismo nuemro.

Alguna idea de lo que puede ser ?

Saludos
  #5 (permalink)  
Antiguo 14/07/2014, 12:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: triggers para muchas tablas

Cita:
Alguna idea de lo que puede ser ?
Facilísimo: Estás indicando en todos los casos 5 campos en el INSERT INTO, y poniendo 25(¡veinticinco!) valores en el VALUES...
No ha modo que eso funcione.
Una de dos: O no indicas qué campos ingresarás, y te remites a poner los valores en el orden de los campos de la tabla; o bien pones los 25 campos en el INSERT INTO, en su orden correcto...
Código MySQL:
Ver original
  1. CREATE TRIGGER `bitacorainsert` AFTER INSERT ON `ps_address`
  2.  insert into bitacora(
  3.     host,
  4.     usuario,
  5.     operacion,
  6.     modificado,
  7.     tabla)
  8.     -- 5 campos
  9.     new.id_address,
  10.     new.id_country,
  11.     new.id_state,
  12.     new.id_customer,
  13.     new.id_manufacturer,
  14.     new.id_supplier,
  15.     new.id_warehouse,
  16.     new.alias,
  17.     new.company,
  18.     new.lastname,
  19.     new.firstname,
  20.     new.address1,
  21.     new.address2,
  22.     new.postcode,
  23.     new.city,
  24.     new.other,
  25.     new.phone,
  26.     new.phone_mobile,
  27.     new.vat_number,
  28.     new.dni,
  29.     new.date_add,
  30.     new.date_upd,
  31.     new.active,
  32.     new.deleted,
  33.     now());
  34.     -- 25 valores
  35.  
  36. CREATE TRIGGER `delete_ps_adress` AFTER DELETE ON `ps_address`
  37.     INSERT into bitacora(
  38.         host,
  39.         usuario,
  40.         operacion,
  41.         modificado,
  42.         tabla)
  43.         -- 5 campos
  44.     values(
  45.         old.id_address,
  46.         old.id_country,
  47.         old.id_state,
  48.         old.id_customer,
  49.         old.id_manufacturer,
  50.         old.id_supplier,
  51.         old.id_warehouse,
  52.         old.alias,
  53.         old.company,
  54.         old.lastname,
  55.         old.firstname,
  56.         old.address1,
  57.         old.address2,
  58.         old.postcode,
  59.         old.city,
  60.         old.other,
  61.         old.phone,
  62.         old.phone_mobile,
  63.         old.vat_number,
  64.         old.dni,
  65.         old.date_add,
  66.         old.date_upd,
  67.         old.active,
  68.         old.deleted,
  69.         now());
  70.         -- 25 valores
  71.        
  72.  
  73. CREATE TRIGGER `update_ps_address` AFTER UPDATE ON `ps_address`
  74. insert into bitacora(
  75.     host,
  76.     usuario,
  77.     operacion,
  78.     modificado,
  79.     tabla)
  80.     -- 5 Campos
  81.     OLD.id_address,
  82.     old.id_country,
  83.     old.id_state,
  84.     old.id_customer,
  85.     old.id_manufacturer,
  86.     old.id_supplier,
  87.     old.id_warehouse,
  88.     old.alias,
  89.     old.company,
  90.     old.lastname,
  91.     old.firstname,
  92.     old.address1,
  93.     old.address2,
  94.     old.postcode,
  95.     old.city,
  96.     old.other,
  97.     old.phone,
  98.     old.phone_mobile,
  99.     old.vat_number,
  100.     old.dni,
  101.     old.date_add,
  102.     old.date_upd,
  103.     old.active,
  104.     old.deleted,
  105.     now());
  106.     -- 25 valores
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 14/07/2014, 15:48
 
Fecha de Ingreso: enero-2014
Mensajes: 17
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: triggers para muchas tablas

Tonto de mi estuve basandome en un ejemplo que encontre de internet y al implementarlo a mi tabla no me fije en ese detalle tan basico, perdon fue mi tonta culpa.

Gracias y salidos

Etiquetas: campo, muchas, registro, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:37.