Ver Mensaje Individual
  #5 (permalink)  
Antiguo 24/05/2008, 17:40
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: Ayuda con trigger

Te falta un poquito de conocimientos de la teoría de triggers.
1. Los triggers se definen ante tres tipos de eventos en una tabla y no se pueden definir ante eventos de un campo de la tabla. No son tan específicos.
2. Los eventos capturables son INSERT UPDATE y DELETE. No se pueden definir dos triggers para el mismo evento en la misma tabla que hagan cosas distintas. Lo que puedes hacer es que determine que hacer ante determinadas circunstancias. Para eso existen las sentencias de control de flujo (IF... THEN ... ELSE ... END IF / CASE ... WHEN ... THEN .... ELSE ... END CASE/ etc).
3. El estado de interfase entre una tupla que está entrando y la que existente se hace con las pseudovariables NEW y OLD, en la forma NEW.NombreCampo/OLD.NombreCampo. New hace referencia a los valores entrantes, OLD a los existentes. Obviamente OLD en INSERT y DELETE no tienen sentido.
4. En el caso específico de tu trigger (a pesar de la desinformación de flanagan44, si existen los triggers en MySQL desde la versión 5.0), la cosa es que lo que estás tratando de hacer desde un trigger no tiene mucho sentido. En todo caso eso deberías resolverlo en el WHERE del UPDATE, para que lo actualice si y sólo si el valor a actualizar en diferente, mientras la clave sea igual.
5. El error mayor del trigger tal y como lo estás planteando es que estás confundiendo un INSERT con una función o método de programación. Un INSERT, como el UPDATE, es una SENTENCIA que solamente puede contener asignaciones a campos existentes en la tabla, y los campos USUARI_CODIGO,AUDITO_FECHA_AUDITO,AUDITO_TIPOMOVI M,AUDITO_TABLAAUDITO,AUDITO_CAMPOAUDITO,AUDITO_VAL ORANTE,AUDIO_VALNUEVO, que figuran en tu INSERTno pertenecen a la tabla. No es una función a la que le envías valores para después resolver que usas o que eliminas. Le estás indicando a la base que haga una acción ya definida en su kernel y que no es modificable, sino administrable en base a clausulas y triggers.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 24/05/2008 a las 18:20