Pregunta

He creado un activador similar al siguiente:

delimiter //
CREATE TRIGGER update_total_seconds_on_phone AFTER INSERT
ON cdr 
FOR EACH ROW 
BEGIN
IF NEW.billsec > 0 AND NEW.userfield <> NULL THEN
UPDATE foo
SET total_seconds = total_seconds + NEW.billsec
WHERE phone_id = NEW.userfield;
END IF;

END;//

Parece que está pasando bien. Sin embargo, no parece estar invocando cuando lo necesito. Aquí hay un ejemplo:

mysql> select total_seconds from foo where phone_id = 1;
+---------------+
| total_seconds |
+---------------+
|             0 | 
+---------------+
1 row in set (0.00 sec)

mysql > insertar en cdr (billsec, campo de usuario) VALORES (60, 1); Consulta OK, 1 fila afectada, 12 advertencias (0.00 seg)

mysql> select total_seconds from foo where phone_id = 1;
+---------------+
| total_seconds |
+---------------+
|             0 | 
+---------------+

EDITAR: Las advertencias en este caso particular no afectan el disparador. En su mayoría, las columnas adicionales que no tienen valores predeterminados en la tabla cdr son las que causan las advertencias. En aras de la simplicidad, mantuve breve mi declaración INSERT.

¿Fue útil?

Solución

Hay 12 advertencias generadas. ¿Qué son?

ETA: Oh, espera ... necesitas usar is not null en lugar de <> null. Cualquier comparación con null siempre devolverá <=>.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top