get previous

La sentencia EGL get previous o bien lee la fila anterior de un conjunto de resultados de base de datos relacional, o bien lee el registro anterior del archivo asociado con un registro indexado de EGL.

Solo puede utilizar esta sentencia para un conjunto de resultados de base de datos relacional si especificó la opción scroll en la sentencia open relacionada. La opción scroll solo está disponible si está generando salida en Java.


Diagrama de sintaxis para la sentencia get previous
nombre de registro
Nombre del objeto de E/S; un registro indexado o SQL.
from IDconjuntoResultados
Sólo para procesos SQL, un ID que conecta la sentencia get previous 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 registro indexado:

  record1.hexKey = "FF";
  set record1 position;

  try
    get previous record1;
  onException
    myErrorHandler(8);
    return;
  end
  
  while (record1 not endOfFile)
    processRecord(record1); // manejar los datos

    try
      get previous record1;
    onException
      myErrorHandler(8);
      return;
    end
  end

Los detalles de la sentencia get previous dependen de si está utilizando un registro indexado o de si está ocupando de Proceso SQL.

Registro indexado

Cuando una sentencia get previous 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 previous; o
  • Una sentencia set en el formato set record position.
Las reglas para un registro indexado son las siguientes:
  • Si el archivo no está abierto, la sentencia get previous lee un registro con el valor de clave más alto del archivo.
  • Cada sentencia get previous subsiguiente lee un registro cuyo valor de clave es el próximo más bajo 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 previous ha leído el registro con el valor de clave más bajo del archivo, la siguiente sentencia get previous provocará el valor de error EGL 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 previous subsiguiente en el mismo registro indexado lee el registro de archivo cuyo valor de clave es igual o inferior al valor de set. Si no existe tal registro, el resultado de la sentencia get previous es endOfFile.
      Si el valor de set está rellenado con caracteres FF hexadecimales, el resultado de una sentencia set en el formato set record position es el siguiente:
      • La sentencia set establece una posición de archivo posterior al último registro del archivo
      • Si la próxima operación de E/S es una sentencia get previous, el código generado recupera el último registro del archivo
    • Una sentencia de E/S satisfactoria que no sea una sentencia get previous establece una nueva posición de archivo y la sentencia get previous subsiguiente emitida en el mismo registro EGL lee el registro de archivo anterior. Una vez que una sentencia get next ha leído un registro de archivo, por ejemplo, la sentencia get previous lee el registro de archivo cuyo valor de clave es el siguiente más bajo o devuelve endOfFile.
    • Si una sentencia get next devuelve endOfFile, la sentencia get previous subsiguiente recupera el último 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 bajo sólo se produce después de que una sentencia get previous 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 previous sigue a una operación de E/S satisfactoria que no sea una sentencia get previous, la sentencia get previous pasa por alto los registros con claves duplicadas y recupera el registro con la siguiente clave más baja.
    • 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 de un índice alternativo 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.

Las tres tablas que siguen hacen referencia al código COBOL generado por EGL.

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

Sentencia EGL (por orden) Clave del registro indexado Clave del registro de archivo recuperada por la sentencia Valor de error EGL para COBOL
set (en el formato set record position) 2 -- --
get next cualquiera 2 (la primera) duplicate
get next cualquiera 2 (la segunda) --
get previous cualquiera 1 --
get previous cualquiera -- endOfFile

Sentencia EGL (por orden) Clave del registro indexado Clave del registro de archivo recuperada por la sentencia Valor de error EGL para COBOL
set (en el formato set record position) 1 -- --
get previous cualquiera 1 --

Las tres tablas que siguen hacen referencia al código Java generado por EGL.

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

Sentencia EGL (por orden) Clave del registro indexado Clave del registro de archivo recuperada por la sentencia Valor de error EGL para Java
set (en el formato set record position) 2 -- duplicate
get next cualquiera 2 (la primera) --
get next cualquiera 2 (la segunda) duplicate
get previous cualquiera 1 --
get previous cualquiera -- endOfFile

Sentencia EGL (por orden) Clave del registro indexado Clave del registro de archivo recuperada por la sentencia Valor de error EGL para Java
set (en el formato set record position) 1 -- --
get previous cualquiera 1 --

Proceso SQL

Cuando una sentencia get previous opera en un registro SQL, el código lee la fila anterior de las seleccionadas por una sentencia open pero solo si ha especificado la opción scroll. Si emite una sentencia get previous para recuperar una fila seleccionada mediante una sentencia open que también 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 previous 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 previous que intenta acceder a una fila anterior a la primera fila seleccionada, el entorno de ejecución de EGL actúa de la manera siguiente:
  • No copia datos del conjunto de resultados
  • Deja el cursor abierto, con la posición del cursor inalterada
  • Establece el registro SQL (si lo hay) en noRecordFound

Por lo general, si se produce un error y el proceso continúa, el cursor permanece abierto, con la posición del cursor inalterada.

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.

Conceptos relacionados
Tipos de registros y propiedades

Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.