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

Problemas con triigers

Estas en el tema de Problemas con triigers en el foro de Mysql en Foros del Web. Hola! Soy nuevo con el tema de los triggers, y estoy tratando de realizar unas pruebas, en las que no tengo exito. Mi idea con ...
  #1 (permalink)  
Antiguo 01/10/2012, 06:56
 
Fecha de Ingreso: octubre-2012
Mensajes: 11
Antigüedad: 12 años, 1 mes
Puntos: 0
Problemas con triigers

Hola!
Soy nuevo con el tema de los triggers, y estoy tratando de realizar unas pruebas, en las que no tengo exito.
Mi idea con el ejemplo que tengo en mente es, tengo dos tablas llamadas: nuevosdatos con 3 columnas, codigo int, cuando date,tipo char(1); y otra tabla llamada persona tambien con 3 columnas, codigo int,nombre varchar, edad int.
Mi idea es armar un trigger que al momento de modificar un registro en la tabla nuevosdatos, obtenga el codigo de ese registro que modifico, y revisar si en la tabla de persona existe un registro con ese mismo codigo, en caso de que exista habria que modificar el nombre de esa persona por algo como 'NombreModificado'(para saber que ese registro fue modificado), pero no se como poder obtener ese codigo del registro que se modifico.
Paso el codigo del trigger que escribe, seguramente tenga horrores, pero al ser nuevo en esto hay muchas cosas que todavia no las tengo de manera clara.

CREATE TRIGGER `ModificaNombreEnTablaPersona`
AFTER UPDATE ON `nuevosdatos`
FOR EACH ROW
Update `persona`
Set `nombre`='NombreModificado'
WHERE `nuevosdatos.codigo`=`persona.codigo`
  #2 (permalink)  
Antiguo 01/10/2012, 09: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: 17 años
Puntos: 2658
Respuesta: Problemas con triigers

Código MySQL:
Ver original
  1. CREATE TRIGGER `ModificaNombreEnTablaPersona`
  2. AFTER UPDATE ON `nuevosdatos`
  3.     UPDATE `persona`
  4.     SET `nombre`=NEW.NombreModificado
  5.     WHERE persona.codigo = NEW.codigo;

Son detalles que puedes leer en el manual de referencia: MySQL:: Capitulo 20.1: Sintaxis de CREATE TRIGGER
__________________
¿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; 05/10/2012 a las 09:38
  #3 (permalink)  
Antiguo 05/10/2012, 09:21
 
Fecha de Ingreso: octubre-2012
Mensajes: 11
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Problemas con triigers

no entiendo la diferencia entre tu codigo y el mio
  #4 (permalink)  
Antiguo 05/10/2012, 09:44
Avatar de 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: Problemas con triigers

¿Ves ese "NEW" que está en el codigo?

Bueno, el tema es que no puedes usar los valores de los campos de la tabla directamente, porque o no existen aún (BEFORE), o ya están en ella (AFTER).
Tampoco puedes acceder a las variables que usaste, porque no existen para el TRIGGER.

¿Entonces cómo accedes a los valores que llegan?

Bueno, si hubieses leído el link que te pasé te habrías enterado que existen dos pseudovariables denominadas NEW y OLD, que vienen a representar los estados del registro que estás manipulando.
NEW es el que refiere al los datos entrantes, OLD a los que ya estaban en la tabla.

Cuando tu pusiste esto:
Cita:
`nombre`='NombreModificado'
y esto:
Cita:
`nuevosdatos.codigo`=`persona.codigo`
MySQL no sabía a qué te estabas refiriendo, porque no existen esos objetos para el TRIGGER. Además en el segundo caso está completamente mal escrito, porque el punto separa bloques tabla.columna, y tu enmarcaste todo como una sola cosa.

¿Se va entendiendo?

Lee el link. contiene buenos ejemplos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: tabla, tipo, trigger
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 05:46.