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

Problema con trigger en MySql

Estas en el tema de Problema con trigger en MySql en el foro de Mysql en Foros del Web. Hola: estoy tratando de desarrollar una base de datos para guardar información sobre mis discos, y a la hora de crear un trigger para impedir ...
  #1 (permalink)  
Antiguo 10/05/2006, 13:21
 
Fecha de Ingreso: marzo-2006
Mensajes: 19
Antigüedad: 18 años, 1 mes
Puntos: 0
Problema con trigger en MySql

Hola: estoy tratando de desarrollar una base de datos para guardar información sobre mis discos, y a la hora de crear un trigger para impedir la inserción de dos discos iguales, me encuentro con que me da el siguiente error, sin tener ni idea del por qué:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OR UPDATE ON Discos FOR EACH ROW

BEGIN
IF NEW.titulo <> OLD.titulo AND NEW' at line 2
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END IF' at line 1
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END' at line 1
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/' at line 1



El código del trigger es este, y la verdad, si podéis echarme una mano a la hora de ver qué es lo que falla, os lo agradecería horrores, porque a mí no se me ocurre mucho...

CREATE TRIGGER insercion
BEFORE INSERT OR UPDATE ON Discos FOR EACH ROW

BEGIN
IF NEW.titulo <> OLD.titulo AND NEW.grupo <> OLD.grupo AND NEW.anio <> OLD.anio THEN
RAISE_ERROR(-20005,'El disco ya existe en la base de datos');
END IF;
END;
/


Gracias de antemano ;)
  #2 (permalink)  
Antiguo 12/05/2006, 03:38
 
Fecha de Ingreso: marzo-2006
Mensajes: 19
Antigüedad: 18 años, 1 mes
Puntos: 0
(Nadie? )
  #3 (permalink)  
Antiguo 12/05/2006, 07:42
 
Fecha de Ingreso: abril-2006
Mensajes: 268
Antigüedad: 18 años
Puntos: 2
Es un error de sintaxis. Creo que no se puede utilizar un OR para indicar que el trigger tiene que ser activada cuando ocurra uno o otro evento. La forma de hacerlo seria definiendo dos triggers distintos, uno para el insert y otro para el update.
Saludos.
  #4 (permalink)  
Antiguo 12/05/2006, 12:49
 
Fecha de Ingreso: marzo-2006
Mensajes: 19
Antigüedad: 18 años, 1 mes
Puntos: 0
Fuf :( Así ya lo probé, y tampoco funcionaba :__( Alguna otra ideíla?
  #5 (permalink)  
Antiguo 12/05/2006, 13:03
Avatar de deadlykyo  
Fecha de Ingreso: noviembre-2005
Ubicación: Cbba - Bolivia
Mensajes: 747
Antigüedad: 18 años, 5 meses
Puntos: 5
intentaste usar delimiter:
Código PHP:
//
DELIMITER |

CREATE TRIGGER insercion
BEFORE INSERT 
OR UPDATE ON Discos FOR EACH ROW

BEGIN
IF NEW.titulo <> OLD.titulo AND NEW.grupo <> OLD.grupo AND NEW.anio <> OLD.anio THEN
RAISE_ERROR
(-20005,'El disco ya existe en la base de datos');
END IF;
END;
|

DELIMITER 
saludos, cya
__________________
"El Conocimiento es de todos, no solo de algunos"
  #6 (permalink)  
Antiguo 12/05/2006, 14:19
 
Fecha de Ingreso: marzo-2006
Mensajes: 19
Antigüedad: 18 años, 1 mes
Puntos: 0
^^U Es que mi base de datos no tiene nada que ver con php... de todas maneras lo he probado y sigue dando error... Yo no sé qué más probar :S Al final acabaré haciendo una consulta a la base de datos al nivel de java, y a tomar por cul*... ^^U
  #7 (permalink)  
Antiguo 12/05/2006, 15:21
Avatar de deadlykyo  
Fecha de Ingreso: noviembre-2005
Ubicación: Cbba - Bolivia
Mensajes: 747
Antigüedad: 18 años, 5 meses
Puntos: 5
dramatictone, te estas confundiendo, solo lo puse entre los tags de php para que el texto salga preformateado, pero volviendo al asunto, usando los DELIMITERs y solo con insert ,sigue sin funcionar:


DELIMITER |

CREATE TRIGGER insercion
BEFORE INSERT ON Discos FOR EACH ROW

BEGIN
IF NEW.titulo <> OLD.titulo AND NEW.grupo <> OLD.grupo AND NEW.anio <> OLD.anio THEN
RAISE_ERROR(-20005,'El disco ya existe en la base de datos');
END IF;
END;
|

DELIMITER ;

saludos, cya
__________________
"El Conocimiento es de todos, no solo de algunos"
  #8 (permalink)  
Antiguo 14/05/2006, 13:26
 
Fecha de Ingreso: marzo-2006
Mensajes: 19
Antigüedad: 18 años, 1 mes
Puntos: 0
Buenas, acabo de probar lo último que me dijiste, y tampoco funciona, aunque ahora da un error distinto, este:

ERROR 1363 (HY000): There is no OLD row in on INSERT trigger

Imagino que al quitar la cláusula UPDATE no tiene sentido hablar de un parámetro "old", así que imagino que el fallo estará ahí... De todos modos, creo que voy a replantearme el trigger de otra manera para ver si así funciona, visto que así no llego a buen puerto xDD

Gracias por las molestias ;)
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:27.