entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

problema con Trigger y condicional

Hola, estoy creando un Trigger que si no existe un valor lo inserte sino lo actualize

BEGIN
     IF (SELECT fecha FROM estadisticas_activas WHERE estadisticas_activas.fecha = NEW.fecha) != NEW.fecha THEN 
           INSERT INTO estadisticas_activas (fecha) VALUES (NEW.fecha);                     
     END IF; 
     UPDATE estadisticas_activas SET news_nacionales = news_nacionales + 1 WHERE estadisticas_activas.fecha = NEW.fecha;
END

la condicional no me funciona pero tampoco me da error

2 Respuestas

1voto

Leonardo-Tadei Puntos227320

Hola Dairon,

si dentro del trigger la expresión

SELECT fecha FROM estadisticas_activas WHERE estadisticas_activas.fecha = NEW.fecha

No devuelve registros, devolverá un resultado NULO, y con esta respuesta la comparación con la fecha deja de tener sentido.

Tenés que usar una expresión del tipo:

IF (SELECT fecha FROM estadisticas_activas WHERE estadisticas_activas.fecha = NEW.fecha) IS NULL THEN 

es decir, si el SELECT no devuelve nada, es porque la fecha no existe, entonces hay que crearla.

Recordá que NULO para la DB es como multiplicar por 0: toda otra cosa se convertirá también en cero! (es una comparación que no es exacta pero que me resulta útil)

0voto

dairon comentado

Gracias con eso terminé mi trigger de nuevas noticias en cada tabla

BEGIN 
IF (SELECT fecha FROM estadisticas_activas WHERE estadisticas_activas.fecha = NEW.fecha) IS NULL THEN 
     INSERT INTO estadisticas_activas (fecha) VALUES (NEW.fecha);
END IF;
UPDATE estadisticas_activas SET news_nacional = news_nacional + 1 WHERE estadisticas_activas.fecha = NEW.fecha; 
END

1voto

gderas2 Puntos1780

Una alternativa puede ser un procedimiento almacenado y si la variable fecha es la llave la siguiente:

INSERT INTO estadisticas_activas (fecha) VALUES (NEW.fecha) 
ON DUPLICATE KEY UPDATE news_nacionales = news_nacionales + 1;

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta