Este es un ejercicio sencillo de como recorrer los registros
de un cursor. Yo uso un editor para este ejercicio.
Recomiendo que el punto 1 y 2 sea en una pestaña de tu
editor mientras que el punto 3 en una
pestaña aparte ya que puede adicionar muchos cambios y ejecutarlo.
Pasos:
1. Creamos una tabla ejemplo de nombre M_PRODUCTOS, con los
siguientes campos basicos: codigo, descripcion, ingreso_fecha, estado.
2. Agregamos 6 productos
3. Creamos script de consulta al cursor.
/*
1. CREACION DE TABLA
=================
*/
create table M_PRODUCTOS(
CODIGO VARCHAR2(6),DESCRIPCION VARCHAR2(100), INGRESO_FECHA DATE, ESTADO VARCHAR(1),
CONSTRAINT PK_MPRODCUTOS PRIMARY KEY ( CODIGO )
);
/*
2. AGREGAR NUEVOS REGISTROS
========================
*/
INSERT INTO M_PRODUCTOS VALUES('A00001', 'DESARMADOR PLANO', '10/10/2012', 'A');
INSERT INTO M_PRODUCTOS VALUES('A00002', 'DESARMADOR ESTRELLA', '11/10/2012', 'A');
INSERT INTO M_PRODUCTOS VALUES('A00003', 'TALADRO PERCUTOR', '11/10/2012', 'A');
INSERT INTO M_PRODUCTOS VALUES('A00004', 'TALADRO PORTATIL', '12/10/2012', 'A');
INSERT INTO M_PRODUCTOS VALUES('A00005', 'LIJADORA MANUAL', '12/10/2012', 'A');
INSERT INTO M_PRODUCTOS VALUES('A00006', 'CEPILLO METALICO', '15/10/2012', 'A');
COMMIT ;
/*
Aquí viene el 3er paso
*/
/*
3. SCRIPT DE CONSULTA AL CURSOR
============================
*/
/*SCRIPT */
DECLARE
/*DECLARAMOS LAS VARIABLES QUE RECIBIRRAN LOS DATOS DEL CURSOR*/
V_DESCRIPCION M_PRODUCTOS.DESCRIPCION%TYPE;
V_INGRESO_FECHA M_PRODUCTOS.INGRESO_FECHA%TYPE ;
/*DECLARAMOS EL CURSOR*/
CURSOR C_PROD IS SELECT DESCRIPCION, INGRESO_FECHA FROM M_PRODUCTOS ;
BEGIN
/*<ABRIMOS EL CURSOR*/
OPEN C_PROD ;
--- V_ROW_COUNT := C_PROD%ROWCOUNT ;
/*RECORREMOS EL CURSOR*/
LOOP
FETCH C_PROD INTO V_DESCRIPCION,V_INGRESO_FECHA ;
EXIT WHEN C_PROD%NOTFOUND ;
DBMS_OUTPUT.PUT_LINE(V_DESCRIPCION ||' , ' ||V_INGRESO_FECHA);
END LOOP ;
CLOSE C_PROD ;/*<--- CERRAMOR EL CURSOR*/
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END ;
/*
En la parte superior esta el resultado. Hasta la proxima .....
*/

muy bien explicado gracias!
ResponderEliminarUNA DUDA, SE SI NECESITA QUE CUANDO NO ENCUENTRE UN REGISTRO CONTINUE EL CICLO QUE DEBERIA HACERSE?
ResponderEliminarEn si el script lo que hace es recorrer el cursor abierto si existiese como minimo un registro.
ResponderEliminar