martes, 3 de marzo de 2009

mysql - ERROR 1442 (HY000) - trigger recursivo

ERROR MYSQL
ERROR 1442 (HY000): Can't update table 'docencia' in storedfunction/trigger because it is already used by statement which invokedthis stored function/trigger.

Esto se debe a que si se crease el trigger se harian llamadas recursivas infinitas.

Por ejemplo.
+---------+--------+---------+
cod_pro cod_asp creditos
+---------+--------+---------+
1 1 10
+---------+--------+---------+

Si quiero hacer que si se modifican los creditos, vaya a la tablaprofesores (cod_pro) y le modifique el número de créditos que imparte.

Con un trigger con mysql, no podría hacerlo porque, cada vez que yolance un update, se lanza el trigger y dentro del trigger hay unupdate sobre la misma tabla, por lo que también se lanzaría de nuevoel trigger...y así sucesivamente.

Ejemplo de trigger
delimiter //
CREATE TRIGGER total_creditos3
AFTER UPDATE ON docencia
FOR EACH ROW
BEGIN
IF OLD.creditos != NEW.creditos then
UPDATE docencia SET creditos=creditos + (new.creditos -old.creditos)
wherecod_pro=old.cod_pro;
END IF;
END;//
delimiter ;
palyginti kainas