Cursores en Oracle

Cursores en Oracle

Un cursor es una instrucción SELECT que se define dentro de la sección de declaración de su código PLSQL. Técnicamente los cursores son fragmentos de memoria reservados para procesar los resultados de una consulta SELECT.

Declaración de un cursor.-  Existen tres sintaxis diferentes para declarar un cursor.

1.- Cursor sin parámetros.

Declarar un cursor sin ningún parámetro es el cursor más simple y fácil de utilizar.

Sintaxis

La sintaxis para un cursor sin parámetros es:

CURSOR NOMBRE_CURSOR IS
  DECLARACION_SELECT;

Ejemplo

Se puede definir un cursor llamado c1 como se muestra a continuación.

CURSOR C1 IS
 SELECT CODIGOALUMNO,
        NOMBREALUMNO  
   FROM ALUMNO  
  WHERE CICLO = P_CICLO;

Este cursor mostrara el nombre de todos los alumnos de un ciclo definido

Como utilizar un cursor dentro de un procedimiento almacenado.

CREATE OR REPLACE PROCEDURE P_ACT_ALUMNO(P_CICLO IN ALUMNO.CICLO%TYPE) IS

  CURSOR C1 IS
    SELECT CODIGOALUMNO,
           NOMBREALUMNO
      FROM ALUMNO
     WHERE CICLO = P_CICLO;

  NCODIGOALUMNO ALUMNO.CODIGOALUMNO%TYPE;
  NNOMBRE       ALUMNO.NOMBREALUMNO%TYPE;

BEGIN

  OPEN C1;
  LOOP
    FETCH C1
      INTO NCODIGOALUMNO,
           NNOMBRE;
    EXIT WHEN C2%NOTFOUND;
    UPDATE ALUMNO 
       SET CICLO = 'VII'
     WHERE CODIGOALUMNO = NCODIGOALUMNO;

  END LOOP;
  CLOSE C1;

END;

2.- Declaracion de cursor con parámetros

A medida que nos complicamos, podemos declarar cursores con parámetros.

Sintaxis

La sintaxis para un cursor con parámetros en Oracle / PLSQL es:

CURSOR NOMBRE_CURSOR (LISTA_PARAMETRO) IS
  DECLARACION_SELECT;

Ejemplo

Puede definir un cursor llamado c2 como se muestra a continuación.

CURSOR C2 (P_CICLO IN ALUMNO.CICLO%TYPE) IS 
  SELECT CODIGOALUMNO, 
         NOMBREALUMNO  
    FROM ALUMNO  
   WHERE CICLO = P_CICLO;

El objetivo de este cursor es listar todos los alumnos de un ciclo determinado según el parámetro de ingreso

Ejemplo como utilizar un cursor con parametro.

CREATE OR REPLACE PROCEDURE P_ACT_ALUMNO IS

  CURSOR C2(P_CICLO IN ALUMNO.CICLO%TYPE) IS
    SELECT CODIGOALUMNO,
           NOMBREALUMNO
      FROM ALUMNO
     WHERE CICLO = P_CICLO;

  NCODIGOALUMNO ALUMNO.CODIGOALUMNO%TYPE;
  NNOMBRE       ALUMNO.NOMBREALUMNO%TYPE;

BEGIN

  OPEN C2('VI');
  LOOP
    FETCH C2
      INTO NCODIGOALUMNO,
           NNOMBRE;
    EXIT WHEN C2%NOTFOUND;
    UPDATE ALUMNO 
       SET CICLO = 'VII' 
     WHERE CODIGOALUMNO = NCODIGOALUMNO;

  END LOOP;
  CLOSE C2;

END;

3.- Declaracion de cursor con cláusula de retorno

Finalmente, podemos declarar un cursor con una cláusula de retorno.

Sintaxis

La sintaxis para un cursor con una cláusula de retorno en Oracle / PLSQL es:

CURSOR NOMBRE_CURSOR IS
  DECLARACION_SELECT;
VARIABLE CURSOR%ROWTYPE ;

Ejemplo

Por ejemplo, puede definir un cursor llamado c3 como se muestra a continuación.

CURSOR c3 IS  
SELECT *  
FROM ALUMNO  
WHERE CICLO = 'VII';

ALUMNO C3%ROWTYPE; 
CREATE OR REPLACE PROCEDURE P_ACT_ALUMNO(P_CICLO IN ALUMNO.CICLO%TYPE) IS

  CURSOR C3 IS
    SELECT CODIGOALUMNO,
           NOMBREALUMNO
      FROM ALUMNO
     WHERE CICLO = P_CICLO;

  RALUMNOS C3%ROWTYPE;

BEGIN

  OPEN C3;
  LOOP
    FETCH C3
      INTO RALUMNOS;

    UPDATE ALUMNO 
       SET CICLO = 'VII' 
     WHERE CODIGOALUMNO = RALUMNOS.CODIGOALUMNO;

  END LOOP;
  CLOSE C3;

END;

En conclusión

Es importante saber que en nuestros bloques PL/SQL los cursores son muy importantes, ya en este lenguaje el resultado de una consulta no va directamente al terminal del usuario, sino que se guarda en un área de memoria de la base de datos a la que se accede mediante los cursores nombrados.

En nuestro próximo post veremos las diferencias de un cursor implícito y explicito  y el uso de LOOP FETCH Y FOR LOOP

2 comentarios en “Cursores en Oracle”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.