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

[SOLUCIONADO] Trigger enable disable

Estas en el tema de Trigger enable disable en el foro de Mysql en Foros del Web. Que tal, Como puedo hacer para "activar" "desactivar" un trigger específico. Lo he hecho en SQL pero no encuentro la solución para MySQL. Gracias!!...
  #1 (permalink)  
Antiguo 09/04/2016, 10:38
Avatar de gagustin  
Fecha de Ingreso: diciembre-2009
Mensajes: 19
Antigüedad: 14 años, 11 meses
Puntos: 0
Trigger enable disable

Que tal,

Como puedo hacer para "activar" "desactivar" un trigger específico.
Lo he hecho en SQL pero no encuentro la solución para MySQL. Gracias!!
  #2 (permalink)  
Antiguo 09/04/2016, 11:19
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: Trigger enable disable

No existe eso en MySQL.

¿Qué es exactamente lo que necesitas hacer?
__________________
¿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 09/04/2016, 11:29
Avatar de gagustin  
Fecha de Ingreso: diciembre-2009
Mensajes: 19
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Trigger enable disable

Te explico un poco mejor.
Tengo Tabla1 y Tabla2.
Mismos campos en ambas, y se deben mantener actualizadas una con otra.
Lo que necesito es que el disparase el trigger de la Tabla1, el trigger de la Tabla2 queda inactivo o deshabilitado hasta que el primero termine. De lo contrario me dara un error ya que se dispararan ambos en simultaneo.
Hay algo que pueda utilizar, crear alguna funcion o algo asi que deshabilite y otra que habilite los triggers de una tabla?
  #4 (permalink)  
Antiguo 09/04/2016, 11: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: Trigger enable disable

Ya te dije, no existe forma de evitar el funcionamiento de un trigger como no sea dropearlo.
Lo que deberías hacer posiblemente sea encapsular todo en un SP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 09/04/2016, 12:20
Avatar de gagustin  
Fecha de Ingreso: diciembre-2009
Mensajes: 19
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Trigger enable disable

Ok, no tengo mucha experiencia con MySQL.
Tendrás algun ejemplo de eso, un sp con trigger para insert, update, delete?

Gracias!
  #6 (permalink)  
Antiguo 09/04/2016, 17:16
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: Trigger enable disable

Cita:
un sp con trigger
UN Stored Procedure es una cosa, y un Trigger otra cosa totalmente diferente. No entremezcles conceptos.
Si bien ambas son rutinas, un sp es una rutina almacenada que puede o no tener parámetros de entrada, puede tener o no salidas, y siempre realiza una tarea sí y sólo si se la invoca formalmente.
UN trigger es una rutina almacenada que depende de una tabla, y se ejecuta siempre y en forma automática, ante un evento DML de tabla (INSERT, UPDATE, DELETE), y siempre tiene parámetros de entrada, los cuales son exclusivamente datos de un registro de la misma tabla.

Ambas cosas pertenecen a contextos y entornos de existencia diferentes.

Aclarado esto, la pregunta: ¿Has tenido alguna práctica en stored prcedures en SQL Server?
Es importante para saber cuánto conoces, y cuanto hay que explicarte.

https://dev.mysql.com/doc/refman/5.7...procedure.html
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 10/04/2016, 19:36
Avatar de gagustin  
Fecha de Ingreso: diciembre-2009
Mensajes: 19
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Trigger enable disable

En SQL he trabajado con sp, pero cosas sencillas, con tablas de la base de datos.
Pero no logro solucionar este probelam que me surjio.
En SQL es mas sencillo, ya que creo un trigger en la tabla1, y otro en la tabla2.
Cuando se ejecuta uno, primero deshabilita el segundo trigger, luego ejecuta el evento correspondiente en la tabla, y luego habilita el segundo trigger.
Es muy sencillo, pero al no tener mysql esta opción, no se me ocurre como hacerlo con un sp.
Por eso esperaba que me ayudaras un poco, no solo con la idea sino con la sintaxis, ya que no encuentro algun ejemplo en la web.


Gracias!!
  #8 (permalink)  
Antiguo 11/04/2016, 05:34
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: Trigger enable disable

Entendamos que lo que necesitas no es "ejemplos" de un SP que haga lo que necesitas hacer, sino razonar lo que debe hacer el SP para cumplir la tarea requerida.
Y para eso sólo necesitas saber hacer SP... en cualquier DBMS.
Cambiar de DBMS para hacer un trigger es un tema exclusivamente de sintaxis aplicable a cada uno (T-SQL, PL/SQL, etc. son la forma en que se programa en cada uno). Y con ese fin simplemente se siguen los manuales de referencia.

Dicho esto, haremos una nueva salvedad, para que podamos hablar con propiedad:
Cita:
En SQL he trabajado con sp,
SQL es el lenguaje de consultas, NO EL DBMS. Por favor, no es lo mismo y debemos ser claros.
Cuando dices "SQL" estás hablando de tener experiencia en T-SQL, que es el lenguaje procedural usado por el MS SQL Server.

Aclarado el punto, vamos a razonar lo que necesitas.

Tu SP debe hacer:
1) Recibir un X conjunto de datos, que pueden ser todos, o algunos nulos. Es posible que convenga recibir un parámetro adicional para determinar si es una acción de alta o modificación, uy una diferente para la baja.
2) Verificar si en la tabla de la base donde corre el SP se encuentra un registro coincidente.
3) Si no existe, realizar un INSERT con los datos recibidos.
4) Si existe, realizar un UPDATE para los datos recibidos.
5) En ambos casos, se debe replicar la tarea en la segunda base.
6) Si se recibió DELETE como operación, se procede a dar de baja en ambas bases con un DELETE simple, dado que no genera fallos si no lo encuentra.
7) En todos los casos se devuelve la cantidad de registros afectados (valor obtenido por función propia de MySQL ROW_COUNT()).

Eso sería un ejemplo imaginario, por lo que NO tienes que tomarlo como base, sólo como INSPIRACION o referencia. Es decir, NO hagas un Copy+Paste de esto...

Código MySQL:
Ver original
  1. delimiter $$
  2. CREATE PROCEDURE actualizar_tablas ( INOUT dato1 INT, IN dato2 VARCHAR(200), OUT rws INT, IN operacion CHAR(1))
  3. SET rws = 0;
  4.  
  5. CASE operacion
  6.     WHEN 'D' THEN
  7.         DELETE FROM base1.tabla WHERE idtabla1 = dato1;
  8.         SET rws = rws + ROW_COUNT();
  9.  
  10.         DELETE FROM base2.tabla1  WHERE idtabla1 = dato1;
  11.         SET rws = rws + ROW_COUNT();
  12.     WHEN 'I' THEN
  13.         INSERT IGNORE INTO base1.tabla1 VALUES (dato1, dato2);
  14.         SET rws = rws + ROW_COUNT();
  15.         INSERT IGNORE INTO base2.tabla1 VALUES (dato1, dato2);
  16.         SET rws = rws + ROW_COUNT();
  17.     WHEN 'U' THEN
  18.         UPDATE base1.tabla1 SET columna2 = IF(dato2 <> columna2, dato2, columna2) WHERE idtabla1 = dato1;
  19.         SET rws = rws + ROW_COUNT();
  20.  
  21.         UPDATE base.tabla1
  22.             SET  columna2 = IF(dato2 <> columna2, dato2, columna2)
  23.         WHERE idtabla1 = dato1;
  24.         SET rws = rws + ROW_COUNT();
  25.     ELSE
  26.         SET rws = -1;
  27.  
  28.     END CASE;
  29.  
  30. END $$
  31.  
  32. delimiter ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 11/04/2016, 05:56
Avatar de gagustin  
Fecha de Ingreso: diciembre-2009
Mensajes: 19
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Trigger enable disable

Impecable, muy claro.
Gracias por la ayuda!!!


Saludos!!!

Etiquetas: disable, sql, trigger
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 11:37.