Sentencia LOOP

La sentencia LOOP repite la ejecución de una sentencia o grupo de sentencias.

Invocación

Esta sentencia se puede incluir en:
  • una definición de procedimiento de SQL
  • una sentencia de SQL compuesto (compilado)
  • una sentencia de SQL compuesto (en línea)
Las sentencias compuestas pueden incorporarse en una definición de procedimiento, función o activador de SQL. No se trata de una sentencia ejecutable y no puede prepararse de forma dinámica.

Autorización

No se requieren privilegios para invocar la sentencia LOOP. Sin embargo, el ID de autorización de la sentencia debe mantener los privilegios necesarios para invocar las sentencias de SQL incorporadas en la sentencia LOOP.

Sintaxis

Leer el esquema de sintaxisOmitir el esquema de sintaxis visualetiqueta:LOOP sentencia-rutina-SQLEND LOOPetiqueta
sentencia-rutina-SQL
Leer el esquema de sintaxisOmitir el esquema de sintaxis visualsentencia-procedimiento-SQL;sentencia-función-SQL;

Descripción

etiqueta
Especifica la etiqueta de la sentencia LOOP. Si se especifica la etiqueta inicial, esa etiqueta puede especificarse en sentencias LEAVE e ITERATE. Si se especifica la etiqueta final, se debe especificar la etiqueta inicial correspondiente.
sentencia-procedimiento-SQL
Especifica las sentencias de SQL que se deben invocar en el bucle. La sentencia-procedimiento-SQL sólo se puede aplicar en el contexto de un procedimiento de SQL o una sentencia de SQL compuesto (compilado). Consulte sentencia-procedimiento-SQL en la sentencia de SQL compuesto (compilado).
sentencia-función-SQL
Especifica las sentencias de SQL que se deben invocar en el bucle. La sentencia-función-SQL sólo se puede aplicar en el contexto de una función SQL, un método SQL o una sentencia de SQL compuesto (en línea). Consulte sentencia-función-SQL en FOR.

Ejemplo

Este procedimiento utiliza una sentencia LOOP para leer valores de la tabla employee. Cada vez que se repite el bucle, el parámetro OUT counter se incrementa y el valor de v_midinit se comprueba para asegurarse de que el valor no es un espacio (' '). Si v_midinit es un espacio, la sentencia LEAVE pasa el flujo de control fuera del bucle.
   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