LOOP statement
The LOOP statement repeats the execution of a statement or a group of statements.
Invocation
This statement
can be embedded in an:
- SQL procedure definition
- Compound SQL (compiled) statement
- Compound SQL (inlined) statement
Authorization
No privileges are required to invoke the LOOP statement. However, the authorization ID of the statement must hold the necessary privileges to invoke the SQL statements that are embedded in the LOOP statement.
Syntax
Description
-
label
- Specifies the label for the LOOP statement. If the beginning label is specified, that label can be specified on LEAVE and ITERATE statements. If the ending label is specified, a matching beginning label must be specified. SQL-procedure-statement
- Specifies the SQL statements that are to be invoked in the loop. SQL-procedure-statement is
only applicable when in the context of an SQL procedure or Compound SQL (compiled) statement. See SQL-procedure-statement in
Compound SQL (compiled)
statement.
SQL-function-statement
- Specifies the SQL statements that are to be invoked in the loop. SQL-function-statement is
only applicable when in the context of an SQL function, SQL method, or Compound SQL (inlined) statement. See SQL-function-statement in
FOR
.
Example
This
procedure uses a LOOP statement to fetch values from the
employee
table.
Each time the loop iterates, the OUT parameter counter is
incremented and the value of v_midinit is
checked to ensure that the value is not a single space (' '). If v_midinit is
a single space, the LEAVE statement passes the flow of control outside
of the loop. 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