I have three tables.
Project (Id), attribute (Id), project_attribute (Id, project_id, attribute_id) .
I want to create records in the project_attribute table using all the attributes of the attribute table for each project from the project table.
To create such records, I use the following storage procedure.
DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `proj_attr`() BEGIN DECLARE proj_done, attribute_done BOOLEAN DEFAULT FALSE; declare attributeId int(11) default 0; declare projectId int(11) default 0; DECLARE curProjects CURSOR FOR SELECT id FROM project order by id; DECLARE CONTINUE HANDLER FOR NOT FOUND SET proj_done = TRUE; OPEN curProjects; cur_project_loop: LOOP FETCH FROM curProjects INTO projectId; IF proj_done THEN CLOSE curProjects; LEAVE cur_project_loop; END IF; BLOCK2: BEGIN DECLARE curAttribute CURSOR FOR SELECT id FROM attribute order by id; DECLARE CONTINUE HANDLER FOR NOT FOUND SET attribute_done = TRUE; OPEN curAttribute; cur_attribute_loop: LOOP FETCH FROM curAttribute INTO attributeId; IF attribute_done THEN CLOSE curAttribute; LEAVE cur_attribute_loop; END IF; insert into project_attribute_value(project_id, attribute_id) values(projectId, attributeId); END LOOP cur_attribute_loop; END BLOCK2; END LOOP cur_project_loop; END$$ DELIMITER ;
But this procedure creates records for only 1 project in the project_attribute table, although there are 50 projects in the Project table. The expected number of entries is count (projectId) * count (attributeId).
mysql cursor
Avinash T.
source share