LOOP 语句

LOOP 语句重复执行一个语句或一组语句。

调用

此语句可嵌入在以下项中:
  • SQL 过程定义
  • 复合 SQL(编译型)语句
  • 复合 SQL(直接插入型)语句
复合语句可以嵌入在 SQL 过程定义、SQL 函数定义或 SQL 触发器定义中。 它不是可执行语句,并且不能动态准备。

授权

调用 LOOP 语句不需要任何特权。 但是,该语句的授权标识必须有权调用已嵌入在 LOOP 语句中的 SQL 语句。

语法

Read syntax diagramSkip visual syntax diagramlabel:LOOP SQL-routine-statementEND LOOPlabel
SQL-routine-statement
Read syntax diagramSkip visual syntax diagramSQL-procedure-statement;SQL-function-statement;

描述

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