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

Leer el esquema de sintaxisOmitir el esquema de sintaxis visualetiqueta:WHILEcondición-búsqueda DOsentencia-rutina-SQLEND WHILE etiqueta
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 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