Cursores

Estas sentencias permiten definir un conjunto de campos y registros, sobre los cuales se podrá. Modificar valores, Eliminar registros y moverse dentro de los registros que cumplan con las restricciones definidas para la sentencia.

La mayor ventaja es que la sentencia definida es conservada en una variable, de tipo cursor, esta puede ser utilizada dentro del rango definido al declararla (Global, Shared, Instance, Local)

Para trabajar con cursores se definenen 3 pasos:

Es una buena politica comprobar el valor del sqlca.sqlcode, para ver si la operación realizada fue satisfactoria, al abrir, trabajar o cerrar el cursor.

Declarar el Cursor

Para declarar el cursor. Si esta en un modulo ejecutable de programa presione el boton y elija la opción ‘Declare’, si esta en alguna de las casillas de declaración de variables/constantes haga doble click sobre el icono que dice ‘Cursor’, en ambos casos se continua como sigue.

Aparecera la ventana "Selección de Tabla", solo las tablas que se seleccionen del lístado será posible de manipular. Presione el botón ‘Open’ para que aparescan las tablas seleccionadas, o presione el botón ‘Cancel’ para cancelar la operación. La opción ‘System Tables’ permite seleccionar las Tablas del catalogo de la Base de Datos; estas Tablas son utilizadas para la Administración de la Base de Datos. Las Tablas seleccionadas aparecen en la ventana en una forma grafica y tambien las relaciones existentes.

Seleccione los campos, haciendo un click sobre ellos, en la representación grafica de la Tabla.

En la parte inferior de la ventana aparecen los topicos de trabajo, estos topicos se trabajan igual que cuando se selecciona el ‘Origen de Datos’ para un Datawindows.

Despues de definir la sentencia, cierre la ventana, al hacerlo se preguntara el nombre que tendra el cursor, presione el botón ‘Ok’, y la sentencia se pegara donde este el cursor en la ventana origen.

La sentencia es finalizada con un punto y coma (;), si esta utilizando un Objeto de Transacción distinto al estandar (sqlca), inmediatamente antes del punto y coma escriba lo siguiente:

USING <otro obj>

Donde <otro obj>, corresponde a otro objeto de transacción definido en la aplicación.

Abrir el Cursor

Esta operación se realiza en un modulo de codigo ejecutable de program. Para abrir un cursor, la sentencia es la siguiente:

OPEN <nombre cursor>;

Donde  <nombre cursor> es el nombre que se le asigno al cursor al momento de declararlo. Recuerde que solo puede utilizar los cursores que esten definidos(Globales, Shared, Instance, Local) para su utilización en el rango que abarque el modulo en uso.

Trabajar con el cursor

El trabajar con el cursor se refiere ha hacer uso de este para algún proceso. Es así como se puede obtener Datos de los registros que cumplan con las restricciones definidas al declarar el cursor. Tambien se pueden eliminar el registro donde este actualmente, de la lista de registros que cumplan con las restricciones definidas al declarar el cursor. Por último, tambien se puede actualizar del registro actual, el(los) campo(s) que forman parte de la declaración del cursor.

A continuación definiremos cada una de estas operaciones:

Obtener Datos

Para obtener los datos de un registro se utiliza la siguiente sentencia:

FETCH <operador naveg> <nombre cursor> INTO <lista variables> ;

Donde:

  • <nombre cursor> es el nombre del cursor de donde se desea obtener los datos. Si es la primera sentencia despues de haber abierto el cursor, se obtendran los datos de el primer registro que cumpla la condición fijada en la declaración del cursor, ya que el indicador de posición del registro actual esta en 0. Si se vuelve a repetir la misma sentencia se obtendra el segundo registro, y así consecutivamente.
  • <operador naveg> es una palabra reservada que se utiliza para indicar de donde, dentro de los registros que cumplan la declaración del cursor, se obtendrán los datos para llenar la <lista de variables>. Esta palabra reservada es optativa, ya que por defecto asume NEXT. Las palabras reservadas son las siguientes:

Si se desea eliminar el registro actual del Cursor, utilice la siguiente sentencia:

DELETE FROM <nom tabla> WHERE CURRENT OF <cur name> ;

Donde:

  • <nom tabla>, es el nombre de la Tabla a eliminar el registro.
  • <cur name>, es el nombre del cursor.

Si se desea modificar el valor de un campo, de los seleccionados cuando se definio el cursor, utilice la siguiente sentencia:

UPDATE <nom table> SET <cols> WHERE CURRENT OF <cur> ;

 

Operador

Descripción

Next

Indica que los datos serán obtenidos del siguiente registro, de los que cumplan con la declaración del Cursor.

Prior

Indica que los datos serán obtenidos del registro anterior.

First

Indica que los datos serán obtenidos del primer registro de los que cumplan con la declaración del Cursor.

Last

Indica que los datos serán obtenidos del último registro de los que cumplan con la declaración del Cursor.

Donde:

Cerrar el Cursor

Para cerrar el cursor utilice la siguiente sentencia:

CLOSE <nombre cursor> ;

Donde: <nombre cursor>

El cerrar el cursor, no implica que se pueda volver a abrirlo en el futuro.