forEach

La palabra clave EGL forEach marca el principio de un conjunto de sentencias que se ejecutan en un bucle. La primera iteración se produce solamente si un conjunto de resultados especificado está disponible. (Si el conjunto de resultados no está disponible, la sentencia falla con un error grave.) El bucle lee cada fila del conjunto de resultados hasta que tiene lugar uno de los sucesos siguientes:

Diagrama de sintaxis de forEach
registroSQL
Nombre de un registro SQL que se utiliza en una sentencia open ejecutada anteriormente. Debe especificar un registro SQL o un ID de conjunto de resultados y es recomendable que especifique el ID del conjunto de resultados.
from IDconjuntoResultados
El identificador de conjunto de resultados que se utiliza en una sentencia open ejecutada anteriormente. Para obtener detalles, consulte el apartado IDconjuntoResultados.
into ... elemento
Una cláusula INTO que identifica las variables de lenguaje principal EGL que reciben valores desde el cursor o procedimiento almacenado. En una cláusula como esta (que está fuera de un bloque #sql{ }), no incluya un punto y coma antes del nombre de una variable de lenguaje principal.

Una especificación de una cláusula INTO en este contexto altera temporalmente cualquier cláusula INTO identificada en la sentencia open relacionada.

sentencia
Una sentencia en el lenguaje EGL

En la mayoría de los caos, el tiempo de ejecución de EGL emite una sentencia close implícita después de la última iteración de la sentencia forEach. Esa sentencia implícita modifica las variables del sistema SQL, razón por la que deberá guardar los valores de las variables del sistema relacionadas con SQL en el cuerpo de la sentencia forEach.

El tiempo de ejecución de EGL no emite una sentencia close implícita si la sentencia forEach finaliza debido a un error que no sea noRecordFound.

A continuación se proporciona un ejemplo que se trata en profundidad en Ejemplos de SQL:
  VGVar.handleHardIOErrors  = 1;

  try
    open selectEmp
      with #sql{
        select empnum, empname
        from employee
        where empnum >= :empnum
        for update of empname
      }
      into empnum, empname;
  onException
    myErrorHandler(6);    // salir del programa
  end

  try 
    forEach (from selectEmp)
      empname = empname + " " + "III";
    
      try
        execute
          #sql{
            update employee
            set empname = :empname
          where current of selectEmp
          };
      onException
        myErrorHandler(10); // salir del programa
      end
    end  // fin de forEach; el cursor se cierra automáticamente
         // cuando se lee la última fila del conjunto de resultados

  onException
    // el bloque de excepción relacionado con forEach no se ejecuta si la condición 
    // es "sqlcode = 100", así que evite la prueba "if (sqlcode != 100)"
    myErrorHandler(8);  // salir del programa
  end

  sysLib.commit();

Conceptos relacionados
resultSetID
Soporte de SQL

Tareas relacionadas
Diagrama de sintaxis

Consulta relacionada
Sentencias EGL
exit
open
Ejemplos de SQL

Condiciones de uso | Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.