sql >> データベース >  >> RDS >> Mysql

Mysqlのネストされたカーソル

    これを試してみてください。これで問題は確実に解決します。

    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 ;
    


    1. Oracle DB Server + APEX + ORDS + JasperReportsをゼロから(パート4)

    2. 参照:MySQL拡張機能を使用した完璧なコードサンプルは何ですか?

    3. データベースのディスク容量の計画

    4. MySQLで改行とキャリッジリターン(\ r \ n)を見つける