Sentencia FOR en procedimientos SQL

Las sentencias FOR son un tipo especial de sentencia de bucle, porque se utilizan para iterar sobre filas en un conjunto de resultados definido de sólo lectura.

Cuando se ejecuta una sentencia FOR, se declara implícitamente un cursor de forma que, en cada iteración del bucle FOR, la siguiente fila es el resultado si se obtiene. El bucle continúa hasta que no quedan filas en el conjunto de resultados.

La sentencia FOR simplifica la implementación de un cursor y facilita la recuperación de un conjunto de valores de columna para un conjunto de filas sobre el que se pueden realizar operaciones lógicas.

Aquí hay un ejemplo de un procedimiento SQL que contiene sólo una simple sentencia FOR:
  CREATE PROCEDURE P()
  LANGUAGE SQL
  BEGIN ATOMIC
    DECLARE fullname CHAR(40);
   
    FOR v AS cur1 CURSOR FOR 
                SELECT firstnme, midinit, lastname FROM employee
    DO 
      SET fullname = v.lastname || ',' || v.firstnme 
                     ||' ' || v.midinit;
      INSERT INTO tnames VALUES (fullname);
    END FOR;
  END

Nota: La lógica que se muestra en este ejemplo se implementaría mejor utilizando la función CONCAT. Este sencillo ejemplo sirve para demostrar la sintaxis.

El nombre del bucle for especifica una etiqueta para la sentencia compuesta implícita generada para implementar la sentencia FOR. Sigue las reglas para la etiqueta de una expresión compuesta. El nombre del bucle for puede utilizarse para calificar los nombres de las columnas del conjunto de resultados devuelto por la sentencia select.

El nombre del cursor simplemente nombra el cursor que se utiliza para seleccionar las filas del conjunto de resultados. Si no se especifica, el gestor de bases de datos Db2® generará internamente de forma automática un nombre de cursor único.

Los nombres de columna de la sentencia select deben ser únicos y se requiere una cláusula FROM que especifique una tabla (o varias tablas si se realiza algún tipo de JOIN o UNION). Las tablas y columnas referenciadas deben existir antes de que se ejecute el bucle. Se puede hacer referencia a las tablas temporales globales y a las tablas temporales declaradas.

Las actualizaciones y eliminaciones posicionadas, y las actualizaciones y eliminaciones buscadas se admiten en el bucle FOR. Para garantizar resultados correctos, la especificación del cursor del bucle FOR debe incluir una cláusula FOR UPDATE.

El cursor que se crea en apoyo de la sentencia FOR no puede ser referenciado fuera del bucle FOR.