Ver Mensaje Individual
  #6 (permalink)  
Antiguo 23/09/2009, 07:33
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: 16 años, 5 meses
Puntos: 2658
Respuesta: Actualizar una columna ...

El problema que tienes es que el TRIGGER no te va a devolver ninguna información sobre eso, por dos razones:
Una: No están pensados para generar información de salida, sino para resolver tareas a realizarse en esos eventos.
Dos: Si lo hicieren, solamente obtendrías la información cuando el cambio ya se realizó y no antes de hacerse. Lo de BEFORE se refiere a tareas a realizar cuando ya se está ejecutando la sentencia pero aún no se completó la tarea. Pero no impide hacerla. No confirma.

Lo único que puedes hacer es resolver algo respecto a si un campo entrante va a hacer algo si es diferente al valor que ya está. Una posibilidad es cargar una variable de usuario, pero estas variables existen en el entorno de la sesión y mueren al cerrarse la conexión a donde se crearon.

Algo así:
Código SQL:
Ver original
  1. DROP TRIGGER IF EXISTS VERIFICAR_ACTUALIZACION;
  2. DELIMITER $$
  3. CREATE TRIGGER VERIFICAR_ACTUALIZACION BEFORE UPDATE
  4. ON TABLA1 FOR EACH ROW
  5. BEGIN
  6.   IF  NEW.CAMPO1 != OLD.CAMPO1 THEN
  7.     SET @INFO = 'SE HA PRODUCIDO UN CAMBIO EN EL CAMPO1';
  8.   ELSE
  9.     SET @INFO = 'SIN CAMBIOS';
  10.   END IF;
  11. END$$
  12. DELIMITER ;
Si no se lee esta variable antes de la siguiente actualización, el valor de detección de un cambio se pierde. También se pierde si la conexión es cerrada, como por ejemplo, al usar Navicat, PhpMyAdmin o MyQSLQueryBrowser, ya que en estos tres cada consulta abre y cierra una sesión.

Cualquier otra validación previa al UPDATE se debe hacer en la aplicación y no en la base.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)