tabla - trigger mysql insert asientos contables
Insertar desencadenador MySQL después con la consulta Seleccionar de tabla diferente (2)
nuevo para DBA gracias por tener paciencia conmigo.
Descripción general: tengo grupos, subgrupos y usuarios.
- El usuario puede ser el propietario del grupo, por lo que debe ser el propietario de todos sus subgrupos
- El usuario puede ser colaborador o seguidor del grupo, por lo que debe ser colaborador o seguidor de todos sus subgrupos
- El usuario puede ser colaborador o seguidor de solo un subgrupo
Las tablas son las siguientes (simplificadas):
Grupo (topic_id, title)
Subgrupo (subtopic_id, title, topic_id)
rel_Group (user_id, topic_id, type) // Para determinar la relación del usuario con el grupo (propietario, colaborador o seguidor)
rel_Subgroup (user_id, subtopic_id, type) // Para determinar la relación de usuario a Subgroup (Owner, Collaborator o Follower)
Usuario (user_id)
Quiero crear un desencadenante cuando se crea un subgrupo que INSERTAR / ACTUALIZAR / ELIMINAR filas en rel_Subgroup para que los usuarios que son Propietario, Colaborador o seguidor en grupo sean, respectivamente, Propietario, Colaborador o seguidor en el subgrupo
Esto es lo más cercano que tengo, pero sigo recibiendo: # 1415 - No se permite devolver un conjunto de resultados desde un desencadenador.
Consulta SQL
delimiter //
create trigger Transfer_Rights_to_Subgroup
after insert
on Subgroup
for each row
begin
select user_id,type from rel_Group where rel_Group.topic_id = NEW.topic_id;
insert into rel_Subgroup VALUES (rel_Group.user_id,NEW.subtopic_id,rel_Group.type);
END; //
delimiter ;
Espero ordenar la inserción y luego descubriré la actualización / eliminación.
Cualquier ayuda, muy apreciada!
Gracias
Se las arregló para resolverlo:
DROP TRIGGER IF EXISTS Transfer_Rights_to_Subgroup;
DELIMITER //
CREATE TRIGGER Transfer_Rights_to_Subgroup AFTER INSERT ON subgroup
FOR EACH ROW
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE c1 INT;
DECLARE c2 INT;
DECLARE cur CURSOR FOR SELECT User_ID,Type FROM rel_group WHERE rel_group.Topic_ID = NEW.Topic_ID;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
ins_loop: LOOP
FETCH cur INTO c1,c2;
IF done THEN
LEAVE ins_loop;
END IF;
INSERT INTO rel_Subgroup VALUES (c1,NEW.Subtopic_ID,c2);
END LOOP;
CLOSE cur;
END; //
DELIMITER ;
Prueba este:
delimiter //
create trigger Transfer_Rights_to_Subgroup
after insert
on Subgroup
for each row
begin
select user_id,type into @userid, @type from group where rel_Group.topic_id = NEW.topic_id;
insert into rel_Subgroup VALUES (@userid,NEW.subtopic_id,@type);
END; //
delimiter ;