get next

La sentencia EGL get next lee el registro siguiente de un archivo o cola de mensajes, o la fila siguiente de una base de datos.

Diagrama de sintaxis para la sentencia get next
nombre de registro
Nombre del objeto de E/S; un registro indexado, MQ, relativo, serie o SQL
from IDconjuntoResultados
Sólo para procesos SQL, un ID que conecta la sentencia get next con una sentencia open ejecutada antes en el mismo programa. Para obtener detalles, consulte el apartado resultSetID.
into
Inicia una cláusula EGL into, que lista los elementos que recibe valores de una tabla de base de datos relacional.
elemento
Un elemento que recibe el valor de una columna determinada. No especifique un signo de dos puntos (:) ante el nombre del elemento.

A continuación se ofrece un ejemplo de acceso a archivo:

  try
    open record1 forUpdate;
    onException
      myErrorHandler(8);
      return;
  end
  try
    get next record1; 
    onException
      myErrorHandler(12);
      return;
  end
  
  while (record1 not endOfFile)
    makeChanges(record1); // procesar el registro

    try
      replace record1; 
    onException 
      myErrorHandler(16); 
      return;
    end
    
    try
      get next record1; 
    onException
      myErrorHandler(12);
      return;
    end
  end // fin de while
  
  sysLib.commit();

Los detalles de la sentencia get next dependen del tipo de registro. Para obtener detalles sobre el proceso SQL, consulte la sección Proceso SQL.

Registro indexado

Cuando una sentencia get next opera en un registro indexado, el resultado se basa en la posición actual del archivo, establecida mediante cualquiera de estas operaciones:
  • Una operación de entrada o salida (E/S) satisfactoria, como por ejemplo una sentencia get u otra sentencia get next; o
  • Una sentencia set en el formato set record position.
Las normas son las siguientes:
  • Si el archivo no está abierto, la sentencia get next lee un registro con el valor de clave más bajo del archivo.
  • Cada sentencia get next subsiguiente lee un registro cuyo valor de clave es el próximo más alto en relación a la posición actual del archivo. Más adelante se describe una excepción relativa a las claves duplicadas.
  • Una vez que una sentencia get next ha leído el registro con el valor de clave más alto del archivo, la siguiente sentencia get next provocará el valor de error de E/S endOfFile.
  • La posición actual del archivo resulta afectada por cualquiera de estas operaciones:
    • Una sentencia EGL set en el formato set record position establece una posición de archivo basada en el valor de set, que es el valor de clave del registro indexado al que la sentencia set hace referencia. La sentencia get next subsiguiente en el mismo registro indexado lee el registro de archivo cuyo valor de clave es igual o superior al valor de set. Si no existe tal registro, el resultado de la sentencia get next es endOfFile.
    • Una sentencia de E/S satisfactoria que no sea una sentencia get next establece una nueva posición de archivo y la sentencia get next subsiguiente emitida en el mismo registro EGL lee el siguiente registro del archivo. Una vez que una sentencia get previous ha leído un registro de archivo, por ejemplo, la sentencia get next lee el registro de archivo cuyo valor de clave es el siguiente más alto o devuelve endOfFile.
    • Si una sentencia get previous devuelve endOfFile, la sentencia get next subsiguiente recupera el primer registro del archivo.
    • Después de una sentencia get, get next o get previous no satisfactoria, la posición de archivo no está definida y debe volver a establecerse mediante una sentencia set en el formato set record position o mediante una operación de E/S que no sea una sentencia get next ni get previous.
  • Si utiliza un índice alternativo y en el archivo hay claves duplicadas, se aplican las siguientes normas:
    • La recuperación de un registro con una clave de valor más alto sólo se produce después de que una sentencia get next haya leído todos los registros que tienen la misma clave como registro recuperado más recientemente. El orden en el que se recuperan los registros con claves duplicadas es el orden en el que VSAM devuelve los registros.
    • Si una sentencia get next sigue a una operación de E/S satisfactoria que no sea una sentencia get next, la sentencia get next pasa por alto los registros con claves duplicadas y recupera el registro con la siguiente clave más alta.
    • El valor de error EGL duplicate no se establece si el programa recupera el último registro de un grupo de registros que contienen la misma clave.
Considere un archivo en el que las claves son las siguientes:
  1, 2, 2, 2, 3, 4

Cada una de las tablas siguientes ilustra el resultado de la ejecución de una secuencia de sentencias EGL en el mismo registro indexado.

Sentencia EGL (por orden) Clave del registro indexado Clave del registro de archivo recuperada por la sentencia Valor de error EGL
get 2 2 (la primera de tres) duplicate
get next cualquiera 2 (la segunda) duplicate
get next cualquiera 2 (la tercera)
get next cualquiera 3

Sentencia EGL (por orden) Clave del registro indexado Clave del registro de archivo recuperada por la sentencia Valor de error EGL
set (en el formato set record position) 2 sin recuperación duplicate
get next cualquiera 2 (la primera de tres)
get next cualquiera 2 (la segunda) duplicate
get next cualquiera 2 (la tercera)
get next cualquiera 3

Cola de mensajes

Cuando una sentencia get next opera en un registro MQ, el primer registro de la cola se lee en el registro MQ. Esta colocación se produce debido a que la sentencia get next invoca una o varias llamadas MQSeries:

Registro relativo

Cuando una sentencia get next opera en un registro relativo, el resultado se basa en la posición actual del archivo, establecida mediante una operación de entrada o salida (E/S) satisfactoria, como por ejemplo una sentencia get u otra sentencia get next. Las normas son las siguientes:
  • Si el archivo no está abierto, la sentencia get next lee el primer registro del archivo.
  • Cada sentencia get next subsiguiente lee un registro cuyo valor de clave es el próximo más alto en relación a la posición actual del archivo.
  • Una sentencia get next no devuelve noRecordFound si se suprime el registro siguiente. En lugar de ello, la sentencia get next pasa por alto los registros suprimidos y recupera el registro siguiente del archivo.
  • Una vez que una sentencia get next ha leído el registro con el valor de clave más alto del archivo, la siguiente sentencia get next provocará el valor de error EGL endOfFile.
  • La posición actual del archivo resulta afectada por cualquiera de estas operaciones:
    • Una sentencia de E/S satisfactoria que no sea una sentencia get next establece una nueva posición de archivo y la sentencia get next subsiguiente emitida en el mismo registro EGL lee el siguiente registro del archivo.
    • Después de una sentencia get, get next o get previous no satisfactoria, la posición de archivo no está definida y debe volver a establecerse mediante una sentencia set en el formato set record position o mediante una operación de E/S que no sea una sentencia get next.
  • Una vez que una sentencia get next ha leído el último registro del archivo, la siguiente sentencia get next provocará los valores de error EGL endOfFile y noRecordFound.

Registro serie

Cuando una sentencia get next opera en un registro serie, el resultado se basa en la posición actual del archivo, establecida mediante otra sentencia get next. Las normas son las siguientes:
  • Si el archivo no está abierto, la sentencia get next lee el primer registro del archivo.
  • Cada sentencia get next subsiguiente lee el registro siguiente.
  • Una vez que una sentencia get next ha leído el último registro, la sentencia get next subsiguiente provocará el valor de error EGL endOfFile.
  • Si el código generado añade un registro serie y luego emite el equivalente de una sentencia get next en el mismo archivo, EGL cierra y vuelve a abrir el archivo antes de ejecutar la sentencia get next. Por tanto, una sentencia get next que sigue a una sentencia add lee el primer registro del archivo. Este comportamiento también se produce cuando las sentencias get next y add se encuentran en programas diferentes, y un programa llama al otro.

Es aconsejable evitar que el mismo archivo esté abierto en más de un programa simultáneamente.

Proceso SQL

Cuando una sentencia get next opera en un registro SQL, el código lee la fila siguiente de las seleccionadas por una sentencia open. Si emite una sentencia get next para recuperar una fila seleccionada mediante una sentencia open que tiene la opción forUpdate, puede realizar cualquiera de estas acciones:
  • Cambiar la fila con una sentencia EGL replace
  • Eliminar la fila con una sentencia EGL delete
  • Cambiar o eliminar la fila con una sentencia EGL execute

Una sentencia SQL FETCH representa la sentencia EGL get next en el código generado. El formato de la sentencia SQL generada no puede cambiarse, excepto para establecer la cláusula INTO.

Si emite una sentencia get next que intenta acceder a una fila que esté más allá de la última fila seleccionada, se aplican las sentencias siguientes:
  • No se copian datos del conjunto de resultados
  • EGL establece el registro SQL (si lo hay) en noRecordFound
  • Si la sentencia open relacionada incluía la opción scroll, el cursor permanece abierto con la posición del cursor inalterada.
  • Si no ha establecido la opción, scroll, el cursor se cierra.

Finalmente, al especificar SQL COMMIT o sysLib.commit, el código conserva la posición en el cursor declarado en la sentencia open, pero sólo en caso de que utilice la opción hold en la sentencia open.

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