Nested Cursors in Mysql

后端 未结 3 1310
灰色年华
灰色年华 2020-12-24 03:08

I have three tables.
Project(Id), attribute(Id), project_attribute(Id, project_id, attribute_id).

I want to create records in project_at

3条回答
  •  太阳男子
    2020-12-24 03:19

    Try this, this will surely solve your issue.

    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 proj_done THEN
                set proj_done = false;
                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 ;
    

提交回复
热议问题