添加 WHILE 和 FOR 循环

WHILE 与 FOR 语句都可在 SPL 例程中创建执行循环。WHILE 循环以 WHILE condition 开始,只要条件为真就执行语句块,并以 END WHILE 结束。

下图展示有效的 WHILE 条件。只要在 WHILE 语句中指定的条件为真,例程就执行 WHILE 循环。

图: 只要在 WHILE 语句中指定的条件为真,例程就执行 WHILE 循环。

CREATE PROCEDURE test_rows( num INT )
            
            DEFINE i INTEGER;
            LET i = 1;
            
            WHILE i < num
            INSERT INTO table1 (numbers) VALUES (i);
            LET i = i + 1;
            END WHILE;
            
            END PROCEDURE;

前图中的 SPL 例程接受整数作为参数,然后在它每一次执行 WHILE 循环时,就将整数值插入到 table1numbers 列内。插入的值从 1 开始,且增大到 num - 1

请当心,不要创建无限的循环,如下图所示。

图: 接受整数为参数,然后将整数值插入到 numbers 列的例程。

CREATE PROCEDURE endless_loop()
            
            DEFINE i INTEGER;
            LET i = 1;
            WHILE ( 1 = 1 )            -- don't do this!
            LET i = i + 1;
            INSERT INTO table1 VALUES (i);
            END WHILE;
            
            END PROCEDURE;

FOR 循环从 FOR 语句扩展到 END FOR 语句,并执行在 FOR 语句中定义的指定次数的迭代。下图展示在 FOR 循环中定义迭代的几种方式。

对于 FOR 循环的每一迭代,重置迭代变量(在后面的示例中声明为 i),并以该变量的新值执行该循环内的语句。

图: 定义 FOR 循环中的迭代。

FOR i = 1 TO 10
            . . .
            END FOR;
            
            FOR i = 1 TO 10 STEP 2
            . . .
            END FOR;
            
            FOR i IN (2,4,8,14,22,32)
            . . .
            END FOR;
            
            FOR i IN (1 TO 20 STEP 5, 20 to 1 STEP -5, 1,2,3,4,5)
            . . .
            END FOR:
在第一个示例中,只要 i 介于 1 之间 10,包括 1 与 10,该 SPL 过程就执行 FOR 循环。在第二个示例中,i1357,等等递进,但从不超过 10。第三个示例检查 i 是否在定义了的值集之内。在第四个示例中,当 i161116201510512345 时,该 SPL 过程执行循环——换言之,执行循环 13 次。
提示: WHILE 循环与 FOR 循环之间的主要差异是,FOR 循环保证会结束,但 WHILE 循环不然。FOR 语句指定循环执行的确切次数,除非语句导致例程退出该循环。使用 WHILE,可能创建无限的循环。