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:
- Declarar el Cursor, esto se hace estando en un modulo ejecutable de programa o bien en alguna casillad de declaración de variables.
- Abrir el Cursor, esta operación inicializa la sentencia SQL definida en el paso anterior.
- Trabajar con el cursor, esto se refiere a las acciones de Navegar, Actualizar y Eliminar.
- Cerrar el Cursor, esto libera la memoría que utiliza la variable declarada como cursor. Se puede volver a Abrir el Cursor, si fuese necesario
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.
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.
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.
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:
Actualizar Datos
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:
- <nom table>, es el nombre de la Tabla a modificarse.
- <cols>, es un listado de los campos, separados por coma. Nombre del campo, signo igual (=) y el valor a asignarse.
- <cur>, nombre del 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.