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

Ayuda con trigger

Estas en el tema de Ayuda con trigger en el foro de Mysql en Foros del Web. Hola a migos a ver si me orientan un poco, estoy tratando de hacer un trigger para una tabla que se llama c_proveedor, la idea ...
  #1 (permalink)  
Antiguo 24/05/2008, 07:22
 
Fecha de Ingreso: agosto-2005
Mensajes: 86
Antigüedad: 18 años, 7 meses
Puntos: 0
Ayuda con trigger

Hola a migos a ver si me orientan un poco, estoy tratando de hacer un trigger para una tabla que se llama c_proveedor, la idea es disparar el trigger cuando alguien haga un cambio de un campo mi poblema es que tengo tres campos en el trigger que son AUDITO_CAMPOAUDITO,AUDITO_VALORANTE,AUDIO_VALNUEVO
Lo que no se es como decirle al trigger que identifique cual es el campo que se hizo el cambio este es mi trigger

CREATE TRIGGER AUDITORIA AFTER UPDATE ON C_PROVEEDOR,
FOR EACH ROW BEGIN
INSERT INTO G_AUDITO (USUARI_CODIGO,AUDITO_FECHA_AUDITO,AUDITO_TIPOMOVI M,AUDITO_TABLAAUDITO,AUDITO_CAMPOAUDITO,AUDITO_VAL ORANTE,AUDIO_VALNUEVO)
VALUES (s_username,NOW(),INSERT,PROVEEDOR,AUDITO_CAMPOAUD ITO,AUDITO_VALORANTE,AUDIO_VALNUEVO)

Y esta es la estructura de mi tabla

CREATE TABLE IF NOT EXISTS `c_proveedor` (
`PROVED_CODIGO` int(5) NOT NULL auto_increment,
`PROVED_RAZSOC` varchar(40) NOT NULL,
`PROVED_RUC` varchar(14) NOT NULL,
`PROVED_TIPO` varchar(1) NOT NULL,
`PROVED_DIREC` varchar(20) NOT NULL,
`PROVED_TELEF` varchar(13) NOT NULL,
`PROVED_OBSERVA` varchar(30) default NULL,
`PROVED_STATUS` varchar(3) NOT NULL,
PRIMARY KEY (`PROVED_CODIGO`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;




Gracias a todos


César
  #2 (permalink)  
Antiguo 24/05/2008, 08:37
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Ayuda con trigger

esto es MySQL ..... ¿que hace en el foro de PHP???
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 24/05/2008, 11:35
Avatar de flanagan44  
Fecha de Ingreso: abril-2004
Mensajes: 182
Antigüedad: 20 años
Puntos: 2
Respuesta: Ayuda con trigger

Cita:
Iniciado por pateketrueke Ver Mensaje
esto es MySQL ..... ¿que hace en el foro de PHP???
A parte en MySQL no hay triggers, solo estan en SQL, asin que igual por eso no te funciona
  #4 (permalink)  
Antiguo 24/05/2008, 13:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ayuda con trigger

Tema trasladado a MySQL.
  #5 (permalink)  
Antiguo 24/05/2008, 17:40
Avatar de 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, 4 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
  #6 (permalink)  
Antiguo 25/05/2008, 00:20
Avatar de flanagan44  
Fecha de Ingreso: abril-2004
Mensajes: 182
Antigüedad: 20 años
Puntos: 2
Respuesta: Ayuda con trigger

Upps

pido mil disculpas, la verdad es que si que estoy un poco desactualizado.

Siento mi afirmacion, un saludo y espero no haber molestado a nadie,
un saludo y gracias por la aclaracion gnzsoloyo
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 07:23.