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

trigger insert

Estas en el tema de trigger insert en el foro de Mysql en Foros del Web. hola bueno tengo la necesidad realizar una clonación de los datos de una tabla, por la razón de que necesito saber los estados por los ...
  #1 (permalink)  
Antiguo 01/07/2008, 15:30
Avatar de wladtepes  
Fecha de Ingreso: febrero-2008
Mensajes: 140
Antigüedad: 16 años, 2 meses
Puntos: 0
Exclamación trigger insert

hola bueno tengo la necesidad realizar una clonación de los datos de una tabla, por la razón de que necesito saber los estados por los cuales pasa la información buena primero cree un trigger para que guardara las actualizaciones que se le hacian a la información, pero me falta crear un trigger o función que tome la información cuando recién se ingresa a la base y la guarde en otra tabla, cree un trigger para esto pero no me funciona y me arroja un error que no entiendo


este es el trigger para el insert




CREATE TRIGGER insert_clientes before insert ON clientes
FOR EACH ROW
INSERT INTO auditoria_clientes(nombre, anterior_seccion, usuario, modificado )
VALUES (nombre,seccion, CURRENT_USER(), NOW() );

error

#1054 - La columna 'seccion' en field list es desconocida


de antemano gracias

  #2 (permalink)  
Antiguo 02/07/2008, 05:12
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: trigger insert

Ajá... Y este campo:

VALUES (nombre,seccion, CURRENT_USER(), NOW() );

¿de dónde lo sacás?

Esto es lo que te está diciendo: Ese campo no existe...
__________________
¿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 02/07/2008, 08:07
Avatar de wladtepes  
Fecha de Ingreso: febrero-2008
Mensajes: 140
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: trigger insert

Tomo este datos de la tabla "clientes " y el campo de "seccion" si existe y posee datos

por eso no estiendo el error

  #4 (permalink)  
Antiguo 02/07/2008, 08: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: trigger insert

¿Y cómo hace MySQL para saber cuál valor de seccion en qué registro debe tomarlo?

El problema es que en realidad no estás tomando ningún dato. Para que eso funcionara, deberías hacer algo así:
Código:
CREATE TRIGGER insert_clientes before insert ON clientes
FOR EACH ROW
INSERT INTO auditoria_clientes(nombre, anterior_seccion, usuario, modificado )
SELECT nombre,seccion, CURRENT_USER(), NOW() FROM clientes
WHERE nombre = NEW.nombre;
Ten en cuenta que en los triggers del evento INSERT los únicos valores de entrada que dispones son los que pusiste en la sentencia que lo disparó, no puedes usar otros valores a menos que dentro del cuerpo del trigger los obtengas de algún modo. Este es el caso. No estás posicionado en un registro, eso no existe. O usas la pseudotabla NEW, o debes obtener el dato de alguna fuente.
En este ejemplo estoy SUPONIENDO que el INSERT que disparó el trigger incluye un campo nombre de donde tomar el valor, de lo contrario el código podría quedar:
Código:
CREATE TRIGGER insert_clientes before insert ON clientes
FOR EACH ROW
INSERT INTO auditoria_clientes(nombre, anterior_seccion, usuario, modificado )
VALUES(NEW.nombre, NEW.seccion, CURRENT_USER(), NOW());
__________________
¿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; 02/07/2008 a las 09:52
  #5 (permalink)  
Antiguo 02/07/2008, 09:46
Avatar de wladtepes  
Fecha de Ingreso: febrero-2008
Mensajes: 140
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: trigger insert

MMMMM......
eso lo explica gracias qnzsoloyo por tu ayuda pruebo el trigger y te digo si me funciona


muchas gracias


  #6 (permalink)  
Antiguo 02/07/2008, 10:23
Avatar de wladtepes  
Fecha de Ingreso: febrero-2008
Mensajes: 140
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: trigger insert

el trigger funciona toma cada insert y lo guarda en otra tabla , pero ademas cuando un dato se actualiza vuelve a guargar el mismo dato

Última edición por wladtepes; 02/07/2008 a las 10:38
  #7 (permalink)  
Antiguo 02/07/2008, 11:15
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: trigger insert

Allí el tema es que debes controlar si debe insertar o actualizar.
Lo que puedes usar en la cláusula ON DUPLICATE KEY del INSERT.
En la tabla clientes, los eventos de INSERT y UPDATE son independientes, por lo que o bien haces un trigger que controle ambos, o haces un trigger para cada uno.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 02/07/2008, 14:04
Avatar de wladtepes  
Fecha de Ingreso: febrero-2008
Mensajes: 140
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: trigger insert

alguna sugerencia o ejemplo de como podria ser
  #9 (permalink)  
Antiguo 03/07/2008, 10:41
Avatar de wladtepes  
Fecha de Ingreso: febrero-2008
Mensajes: 140
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: trigger insert

ya termine el trigger para las dos funciones , lo raro es que en windows no funciona muy bien que digamos , mientras en mac cero problema

dejo los trigger por si a alguien le interesa son simples pero funcionan
, si tienen una sugerencia o mejora para esto les estaria muy agradecido que lo pudieran comunicar






trigger para obtener las actualizaciones de usuario

create trigger update_usuario after update on usuario
for each row

insert into respaldo(cd,nombre_2,estado_2,hora)values(new.id,n ew.nombre,new.estado,now())

************************************

trigger para obtener los insert de usuario


create trigger insert_usuario after insert on usuario
for each row

insert into respaldo(nombre_2,estado_2,hora)values(new.nombre, new.estado, now())
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 06:21.