Un cursor es una herramienta de sql que permite recorrer los resultados de una consulta y realizar operaciones. Seria un equivalente a leer la consulta con un CRecordSet( o el tipo de dato que use el lenguaje para manejar base de datos), cargar los datos en un array/File, recorrerlo y en cada vuelta realizar la accion.
Además de la sentencia, en oracle se necesita crear un record en el cual devuleve los datos del registro en el que esta parado. Importante, los campos del record y los de la sentencia de SQL tienen que estar en el mismo orden.
Ejemplo General:
DECLARE CURSOR [nombrecursor]IS
SELECT [campo(s)] FROM [tabla(s)] WHERE [condicion(es)];
TYPE [nombreRecord] IS RECORD
([nombrecampo1] [tabla1].[campo1]%type,
[nombrecampo2] [tabla1].[campo2]%type,
//...
[nombrecampon] [tabla1].[campon]%type);
[variable] [nombrerecord];
BEGIN
OPEN [nombrecursor];
//..
LOOP
Fetch [nombrecursor] into
END;
El siguiente es un ejemplo donde se recorre la tabla productos y se le asigna como código administrativo el nombre del producto.
El diseño de la tabla de productos es el siguiente:
DECLARE CURSOR cursorProductos IS
SELECT CódigoProducto, Nombre FROM Productos;
TYPE recordProductos IS RECORD
(
Nombre Productos.Nombre %type);
recProductos recordProductos;
BEGIN
END;
Evidentemente, el ejemplo anterior se podria haber resuelto con la siguiente sentencia:
UPDATE Productos SET CódigoAdministrativo = Nombre
Pero el objetivo de este, como todo ejemplo, solo sirve para mostrar la aplicación de una herramienta. Como último detalle aclaro que la instrucción [variable] [tabla].[campo]%type, declara una variable con el nombre [variable] del mismo tipo que el dato de
Espero sepan disculpar la falta de tabulado, pero todavía no me acostumbro a html.
