He escrito un activador para insertar una fila en la tabla b después de una operación en la tabla a. Por alguna razón, no tiene ningún efecto si agrego este disparador 'después de insertar' y luego inserto una fila. Sin embargo, funciona si agrego el activador como 'después de la actualización' y actualizo la fila.MYSQL Trigger funciona si uso 'después de la actualización' pero no 'después de insertar'?
Aquí está el código de activación. Cuando reemplazo 'DESPUÉS DE ACTUALIZAR' con 'DESPUÉS DE INSERTAR', y hago una inserción, entonces no ocurre nada cuando inserto una nueva fila. No obtengo ningún error al crear el disparador, y no estoy tratando de actualizar la misma tabla en la que se está estableciendo el disparador. ¡Se agradece cualquier ayuda! gracias, Jen
drop trigger if exists insertUndecided;
DELIMITER //
CREATE TRIGGER insertUndecided
AFTER UPDATE ON jiraissue
FOR EACH ROW
BEGIN
insert into nodeassociation (SOURCE_NODE_ID, SOURCE_NODE_ENTITY, SINK_NODE_ID, SINK_NODE_ENTITY, ASSOCIATION_TYPE, SEQUENCE)
select
NEW.id as SOURCE_NODE_ID,
'Issue' as SOURCE_NODE_ENTITY,
(select pv.id from projectversion pv
where pv.vname='undecided'
and pv.project=NEW.project) as SINK_NODE_ID,
'Version' as SINK_NODE_ENTITY,
'IssueFixVersion' as ASSOCIATION_TYPE,
NULL as SEQUENCE
from dual where exists
(select pkey from jiraissue
where id=NEW.id and id not in
(select distinct source_node_id from nodeassociation
where source_node_entity='Issue' and SINK_NODE_ENTITY='Version'
and ASSOCIATION_TYPE='IssueFixVersion'));
END;//
DELIMITER ;
Consulte esta respuesta que parece aplicarse a su situación también: http://stackoverflow.com/a/9097459/870122 – perissf
Intente reproducir este comportamiento sin desencadenar. Ejecute la instrucción SELECT. ¿Devolverá alguna fila? – Devart
@perissf - gracias por su respuesta. ese problema es sobre "Dentro de una función almacenada o activador, no está permitido modificar una tabla que ya está siendo utilizada (para lectura o escritura) por la declaración que invocó la función o desencadenante". Si bien estoy leyendo la tabla jiraissue, no la estoy actualizando. Y eso no explica por qué parece funcionar si lo ejecuto 'DESPUÉS DE ACTUALIZAR', pero no 'DESPUÉS DE INSERTAR'? – jen