Ver Mensaje Individual
  #8 (permalink)  
Antiguo 11/04/2016, 05:34
Avatar de gnzsoloyo
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)