mysql> CREATE PROCEDURE P20()    -> BEGIN    -> DECLARE v INT;    -> SET v=0;    -> loop_label: LOOP    -> IF v=3 THEN    -> SET v=v+1;    -> ITERATE loop_label;    -> END IF;    -> INSERT INTO t VALUES(v);    -> SET v = v+1;    -> IF v>=5 THEN    -> LEAVE loop_label;    -> END IF;    -> END LOOP;    -> END;//
mysql> select * from t;
+------+
| s1   |
+------+
|    0 | 
|    1 | 
|    2 | 
|    4 | 
+------+
4 rows in set (0.00 sec)  在我脑子里是这样运行的 当if v=3 初始是0 不等于3 直接跳出if  执行 insert into 添加一条数据为0第二次执行 v=1 了 也不等于三 继续执行 insert 添加条数据为1  第三次执行 v=2 还是跳出if 执行insert 添加条数据为2第四执行 v=3 进入if语句体 v=3+1 等于4了 然后insert 一条数据为4  set v =4+1 if 5>=5 跳出循环!!!
 我的问题是 ITERATE loop_label; 这条语句 不知道干什么用!!! 以上是我自己的分析 不知道对不对,请前辈们指点

解决方案 »

  1.   

    CREATE PROCEDURE P20()
    BEGIN
    DECLARE v INT;
    SET v=0; loop_label: LOOP
    IF v=3 THEN
    SET v=v+1;
    ITERATE loop_label; // 再次执行本次LOOP, 等同于 goto loop_label
    END IF;
    INSERT INTO t VALUES(v);
    SET v = v+1;
    IF v>=5 THEN
    LEAVE loop_label;
    END IF;
    END LOOP;
    END;//
      

  2.   

    相当于LOOP,即do the loop again,继续循环
    V>=5时跳出
      

  3.   

    所以当你的v=3 时,会执行ITERATE loop_label;,这样直接回到loop_label: LOOP, 不会执行下面的 insert, 
      

  4.   

    ITERATE 
    类似于你java 中的 continue;
      

  5.   

    CREATE PROCEDURE P20()
    BEGIN
        DECLARE v INT;
        SET v=0;    loop_label: LOOP
            IF v=3 THEN
                SET v=v+1;
                ITERATE loop_label;        //  goto loop_label 执行 IF v=3 THEN
            END IF;
            INSERT INTO t VALUES(v);
            SET v = v+1;
            IF v>=5 THEN
                LEAVE loop_label;     跳出LOOP
            END IF;
        END LOOP;
    END;//