Multiple cursors in nested loops in MySQL

前端 未结 5 552
半阙折子戏
半阙折子戏 2021-02-05 11:14

I wish to do something which appear a bit complicated in MySQL. In fact, I wish to open a cursor, do a loop, and in this loop, open a second cursor using the data from the previ

5条回答
  •  北荒
    北荒 (楼主)
    2021-02-05 11:39

    You need to define a new BLOCK inside your 1st cursor loop and use different Declares in that block.

    Something like:

    BLOCK1: begin
        declare v_col1 int;                     
        declare no_more_rows boolean1 := FALSE;  
        declare cursor1 cursor for              
            select col1
            from   MyTable;
        declare continue handler for not found  
            set no_more_rows1 := TRUE;           
        open cursor1;
        LOOP1: loop
            fetch cursor1
            into  v_col1;
            if no_more_rows1 then
                close cursor1;
                leave LOOP1;
            end if;
            BLOCK2: begin
                declare v_col2 int;
                declare no_more_rows2 boolean := FALSE;
                declare cursor2 cursor for
                    select col2
                    from   MyOtherTable
                    where  ref_id = v_col1;
               declare continue handler for not found
                   set no_more_rows2 := TRUE;
                open cursor2;
                LOOP2: loop
                    fetch cursor2
                    into  v_col2;
                    if no_more_rows then
                        close cursor2;
                        leave LOOP2;
                    end if;
                end loop LOOP2;
            end BLOCK2;
        end loop LOOP1;
    end BLOCK1;
    

提交回复
热议问题