jueves, 25 de octubre de 2012

PL/SQL: RECORRIENDO LOS REGISTROS EN UN CURSOR


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 .....
*/

3 comentarios:

  1. muy bien explicado gracias!

    ResponderEliminar
  2. UNA DUDA, SE SI NECESITA QUE CUANDO NO ENCUENTRE UN REGISTRO CONTINUE EL CICLO QUE DEBERIA HACERSE?

    ResponderEliminar
  3. En si el script lo que hace es recorrer el cursor abierto si existiese como minimo un registro.

    ResponderEliminar