LOOP 语句
LOOP 语句重复执行一个语句或一组语句。
调用
此语句可嵌入在以下项中:
- SQL 过程定义
- 复合 SQL(编译型)语句
- 复合 SQL(直接插入型)语句
授权
调用 LOOP 语句不需要任何特权。 但是,该语句的授权标识必须有权调用已嵌入在 LOOP 语句中的 SQL 语句。
语法
描述
- label
- 指定 LOOP 语句的标签。 如果指定了开始标签,那么可以在 LEAVE 和 ITERATE 语句中指定该标签。 如果指定了结束标签,那么必须指定匹配的开始标签。 SQL-procedure-statement
- 指定要在循环中调用的 SQL 语句。 SQL-procedure-statement 仅适用于 SQL 过程或复合 SQL(编译型)语句的上下文。 请参阅
复合 SQL(编译型)
语句中的 SQL-procedure-statement。 SQL-function-statement - 指定要在循环中调用的 SQL 语句。 SQL-function-statement 仅适用于 SQL 函数、SQL 方法或复合 SQL(内联)语句的上下文。 请参阅
FOR
中的 SQL-function-statement。
示例
此过程使用 LOOP 语句来访存
employee 表中的值。 每次循环迭代时,OUT 参数 counter 递增,并检查 v_midinit 的值以确保该值不是单个空格 (' ')。如果 v_midinit 是单个空格,那么 LEAVE 语句将控制流传递到循环之外。 CREATE PROCEDURE LOOP_UNTIL_SPACE(OUT counter INTEGER)
LANGUAGE SQL
BEGIN
DECLARE v_counter INTEGER DEFAULT 0;
DECLARE v_firstnme VARCHAR(12);
DECLARE v_midinit CHAR(1);
DECLARE v_lastname VARCHAR(15);
DECLARE c1 CURSOR FOR
SELECT firstnme, midinit, lastname
FROM employee;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET counter = -1;
OPEN c1;
fetch_loop:
LOOP
FETCH c1 INTO v_firstnme, v_midinit, v_lastname;
IF v_midinit = ' ' THEN
LEAVE fetch_loop;
END IF;
SET v_counter = v_counter + 1;
END LOOP fetch_loop;
SET counter = v_counter;
CLOSE c1;
END