Sentencia WHILE
La sentencia WHILE repite la ejecución de una sentencia o grupo de sentencias mientras sea verdadera una condición especificada.
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 WHILE. Sin embargo, el ID de autorización de la sentencia debe mantener los privilegios necesarios para invocar las sentencias de SQL y la condición de búsqueda incorporadas en la sentencia WHILE.
Sintaxis
Descripción
- etiqueta
- Especifica la etiqueta de la sentencia WHILE. Si se especifica la etiqueta inicial, esa etiqueta puede especificarse en sentencias LEAVE e ITERATE. Si se especifica una etiqueta final, ésta deberá ser igual que la etiqueta inicial.
- condición-búsqueda
- Especifica una condición que se evalúa antes de cada ejecución del bucle. Si la condición es verdadera, se procesan las sentencias de procedimiento de SQL incluidas en el bucle.
- sentencia-procedimiento-SQL
- Especifica las
sentencias de SQL que se deben ejecutar 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 ejecutar en el bucle. La
sentencia-función-SQL sólo se puede aplicar en una función de SQL o una sentencia de SQL compuesto (en línea) que se puede incorporar en un activador de SQL, una función de SQL o un método de SQL. Consulte
sentencia-función-SQL en
FOR
.
Ejemplo
Este ejemplo utiliza una sentencia WHILE para ejecutar un proceso
iterativo mediante sentencias FETCH y SET.
Mientras el valor de la variable de SQL v_counter sea
menor que la mitad del número de empleados del departamento que
identifica el parámetro IN deptNumber, la sentencia WHILE
seguirá realizando las sentencias FETCH y SET. Cuando la condición deja de ser verdadera, el flujo de control sale de la
sentencia WHILE y cierra el cursor.
CREATE PROCEDURE DEPT_MEDIAN
(IN deptNumber SMALLINT, OUT medianSalary DOUBLE)
LANGUAGE SQL
BEGIN
DECLARE v_numRecords INTEGER DEFAULT 1;
DECLARE v_counter INTEGER DEFAULT 0;
DECLARE c1 CURSOR FOR
SELECT CAST(salary AS DOUBLE)
FROM staff
WHERE DEPT = deptNumber
ORDER BY salary;
DECLARE EXIT HANDLER FOR NOT FOUND
SET medianSalary = 6666;
SET medianSalary = 0;
SELECT COUNT(*) INTO v_numRecords
FROM staff
WHERE DEPT = deptNumber;
OPEN c1;
WHILE v_counter < (v_numRecords / 2 + 1) DO
FETCH c1 INTO medianSalary;
SET v_counter = v_counter + 1;
END WHILE;
CLOSE c1;
END