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

MySQLのネストされたループ内の複数のカーソル

    最初のカーソルループ内に新しいブロックを定義し、そのブロックで異なる宣言を使用する必要があります。

    次のようなもの:

    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;
    


    1. NoSQLにおけるDBAの役割

    2. 指定されたキーが長すぎました。キーの最大長は1000バイトです

    3. MySQLテーブルのツリーパスを取得します

    4. MySQLの幅優先探索クエリ?