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)
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
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