Oracle PL / SQL Cursor: Implicit ,Explicit, Cursor FOR Loop [ejemplo]
¿qué es CURSOR en PL / SQL?
Un Cursor es un puntero a esta área de contexto. Oracle crea un área de contexto para procesar una instrucción SQL que contiene toda la información sobre la instrucción.
PL / SQL permite al programador controlar el área de contexto a través del cursor. Un cursor contiene las filas devueltas por la instrucción SQL. El conjunto de filas que contiene el cursor se denomina conjunto activo., Estos cursores también se pueden nombrar para que puedan ser referidos desde otro lugar del código.
en este tutorial aprenderás-
- Cursor implícito
- Cursor explícito
- atributos del Cursor
- Para la instrucción del Cursor en bucle
el cursor es de dos tipos.
- Cursor implícito
- Cursor explícito
Cursor implícito
cada vez que se producen operaciones DML en la base de datos, se crea un cursor implícito que contiene las filas afectadas, en esa operación en particular., Estos cursores no pueden ser nombrados y, por lo tanto, no pueden ser controlados o referidos desde otro lugar del código. Solo podemos referirnos al cursor más reciente a través de los atributos del cursor.
Cursor explícito
a los programadores se les permite crear un área de contexto con nombre para ejecutar sus operaciones DML para obtener más control sobre ella. El cursor explícito debe ser definido en la sección declaration del bloque PL/SQL, y es creado para la declaración’ SELECT ‘ que necesita ser usada en el código.
a continuación se muestran los pasos que intervienen en el trabajo con cursores explícitos.,
- declarar el cursor
declarar el cursor simplemente significa crear un área de contexto con nombre para la declaración ‘SELECT’ que se define en la parte de la declaración. El nombre de esta área de contexto es el mismo que el nombre del cursor.
- abrir el Cursor
abrir el cursor le indicará al PL / SQL que asigne la memoria para este cursor. Hará que el cursor esté listo para recuperar los registros.
- obtención de datos del Cursor
en este proceso, se ejecuta la instrucción ‘SELECT’ y las filas obtenidas se almacenan en la memoria asignada., Ahora se llaman conjuntos activos. Obtener datos del cursor es una actividad a nivel de registro que significa que podemos acceder a los datos de una manera registro por registro.
cada instrucción fetch obtendrá un conjunto activo y contiene la información de ese registro en particular. Esta instrucción es la misma que la instrucción ‘SELECT’ que obtiene el registro y asigna a la variable en la cláusula ‘INTO’, pero no arrojará ninguna excepción.
- cerrar el Cursor
Una vez que todo el registro se obtiene ahora, Necesitamos cerrar el cursor para que se libere la memoria asignada a esta área de contexto.,
Sintaxis:
- En la sintaxis anterior, la declaración de parte que contiene la declaración del cursor y las variables en las que los datos recopilados serán asignados.
- El cursor se crea para la instrucción’ SELECT ‘ que se da en la declaración del cursor.
- en la parte de ejecución, el cursor declarado se abre, se obtiene y se cierra.
atributos del Cursor
tanto el cursor implícito como el cursor explícito tienen ciertos atributos a los que se puede acceder. Estos atributos proporcionan más información sobre las operaciones del cursor., A continuación se muestran los diferentes atributos del cursor y su uso.
Cursor Attribute | Description |
%FOUND | devuelve el resultado booleano ‘TRUE’ si la operación de búsqueda más reciente obtuvo un registro correctamente, de lo contrario devolverá FALSE. |
%NOTFOUND | esto funciona de forma opuesta a %FOUND devolverá ‘TRUE’ si la operación de búsqueda más reciente no pudo obtener ningún registro., |
%ISOPEN | devuelve el resultado Booleano «TRUE» si el cursor ya está abierto, de lo contrario devuelve ‘FALSE’ |
%ROWCOUNT | devuelve el valor numérico. Da el recuento real de registros que se vieron afectados por la actividad DML. |
Ejemplo 1: en este ejemplo, vamos a ver cómo declarar, abrir, buscar y cerrar el cursor explícito.
proyectaremos todo el nombre del empleado desde la tabla emp usando un cursor., También usaremos el atributo cursor para establecer el bucle para obtener todo el registro del cursor.
Output
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY Total rows fetched is 3
Code Explanation:
- Code line 2: Declaring the cursor guru99_det for statement ‘SELECT emp_name FROM emp’.
- línea de Código 3: declarando variable lv_emp_name.
- línea de código 5: Abriendo el cursor guru99_det.
- línea de Código 6: Establecer la instrucción de bucle básico para obtener todos los registros en la tabla’ emp’.,
- línea de Código 7: obtiene los datos guru99_det y asigna el valor a lv_emp_name.
- línea de código 9: Usando el atributo del cursor ‘% NOTFOUND ‘ para encontrar si todo el registro en el cursor se obtiene. Si se obtiene, devolverá ‘TRUE’ y control saldrá del bucle, de lo contrario el control seguirá obteniendo los datos del cursor e imprimirá los datos.
- Code line 11: EXIT condition for the loop statement.
- línea de código 12: imprime el nombre del empleado obtenido.,
- línea de código 14: Usando el atributo del cursor ‘% ROWCOUNT ‘ para encontrar el número total de registros que se vieron afectados/recuperados en el cursor.
- línea de código 15: después de salir del bucle, el cursor se cierra y la memoria asignada se libera.
For Loop Cursor statement
» FOR LOOP » statement se puede utilizar para trabajar con cursores. Podemos dar el nombre del cursor en lugar del límite de rango en la instrucción FOR loop para que el bucle funcione desde el primer registro del cursor hasta el último registro del cursor., La variable del cursor, la apertura del cursor, la búsqueda y el cierre del cursor se realizarán implícitamente mediante el bucle FOR.
sintaxis:
DECLARECURSOR <cursor_name> IS <SELECT statement>;BEGIN FOR I IN <cursor_name> LOOP . . END LOOP;END;
- En la sintaxis anterior, la parte de declaración contiene la declaración del cursor.
- El cursor se crea para la instrucción’ SELECT ‘ que se da en la declaración del cursor.
- en la parte de ejecución, el cursor declarado se configura en el bucle FOR y la variable de bucle ‘ I ‘ se comportará como variable de cursor en este caso.,
Ejemplo 1: en este ejemplo, proyectaremos todo el nombre del empleado de la tabla emp utilizando un bucle cursor-FOR.
Output
Employee Fetched:BBB Employee Fetched:XXXEmployee Fetched:YYY
Code Explanation:
- Code line 2: Declaring the cursor guru99_det for statement ‘SELECT emp_name FROM emp’.
- línea de código 4: Construyendo el bucle ‘ FOR ‘ para el cursor con la variable de bucle lv_emp_name.
- Código línea 5: Imprimir el nombre del empleado en cada iteración del bucle.,
- línea de código 8: salir del bucle
nota: en el bucle Cursor-FOR, los atributos del cursor no se pueden usar ya que la apertura, obtención y cierre del cursor se realiza implícitamente por el bucle FOR.