sql >> Base de Datos >  >> RDS >> Oracle

Cómo crear PL/SQL SYS_REFCURSOR en Oracle Database

PL/SQL SYS_REFCURSOR en base de datos Oracle

Como aprendimos en la introducción al cursor de referencia, hay tres tipos de cursores de referencia PL/SQL en Oracle Database.

  1. Cursor de referencia fuerte
  2. Cursor de referencia débil y
  3. SYS_REFCURSOR

Hasta ahora, en esta serie hemos cubierto los conceptos de cursor de referencia fuerte y débil. El único tipo de cursor que aún no ha sido tocado es PL/SQL SYS_REFCURSOR en Oracle Database. Que aprenderemos en este blog.

¿Qué es PL/SQL SYS_REFCURSOR?

SYS_REFCURSOR es un cursor de referencia débil predefinido que viene integrado con el software de base de datos de Oracle.

¿Cómo nos ayudará ser un cursor de referencia predefinido?

SYS_REFCURSOR es un cursor de referencia débil predefinido, lo que significa que no tenemos que definirlo en nuestro código como hicimos con el cursor de referencia débil explícito en el tutorial anterior. Como aprendimos en ese tutorial, crear un cursor de referencia débil es un proceso de dos pasos. Primero debe crear el "tipo de cursor de referencia débil" y luego debe crear "una variable de cursor" usando ese cursor de referencia.

Al usar SYS_REFCURSOR, solo tiene que crear una variable de cursor y nada más. SYS_REFCURSOR minimiza por completo el primer paso en el que crea el tipo de cursor de referencia débil.

Entonces, Sys_Refcursor es un cursor de referencia incorporado, ¿dónde podemos encontrar su definición?

Puede encontrar la definición de PL/SQL SYS_REFCURSOR en un script llamado "stdspec.sql". Puede ubicar este script en el directorio cuya ruta es la siguiente. 

%ORACLE_HOME% \RDBMS\ADMIN\stdspec.sql

La definición de SYS_REFCURSOR se verá así:

¿Qué tipo de cursor de referencia es un SYS_REFCURSOR?

Como se mencionó anteriormente en la definición, SYS_REFCURSOR es un cursor de referencia débil.

Ahora que ya has despejado casi todas las dudas sobre SYS_REFCURSOR. Solo quiero hacerte una última pregunta.

Información:No hay espacio entre REF y CURSOR. Es una sola palabra "RefCursor".
Incorrecto:SYS_REF CURSOR
Correcto:SYS_REFCURSOR

¿Por qué alguien declararía un cursor de referencia débil cuando ya tenemos uno predefinido?

Esa es realmente una muy buena pregunta. La respuesta a esta pregunta es No, no necesitamos crear explícitamente un cursor de referencia débil. Oracle minimizó la necesidad de crear un cursor de referencia débil al enviar SYS_REFCURSOR como parte del paquete estándar desde Oracle Database 9i, aunque la opción de crear uno todavía está disponible.

Es como una elección personal, si alguien quiere crear un cursor de referencia débil, puede hacerlo. Si no, entonces tienen SYS_REFCURSOR siempre a su disposición. Mi querido amigo Steven Feuerstein hizo una muy buena entrada de blog respondiendo a esta pregunta que puedes leer aquí.

Veamos un ejemplo muy sencillo que demuestra cómo usar un PL/SQL SYS_REFCURSOR en Oracle Database.

Ejemplo:¿Cómo crear PL/SQL SYS_REFCURSOR en Oracle Database?

SET SERVEROUTPUT ON;
DECLARE
    --Declare cursor variable of SYS_REFCURSOR type
    cur_var SYS_REFCURSOR;
    
    --Declare variables for holding data
    f_name  employees.first_name%TYPE;
    emp_sal employees.salary%TYPE;
BEGIN
OPEN cur_var FOR SELECT first_name, Salary FROM employees WHERE employee_id = 100;
    FETCH cur_var INTO f_name, emp_sal;
    CLOSE cur_var;
    DBMS_OUTPUT.PUT_LINE(f_name ||' '||emp_sal);
END;
/

Puede ver el video tutorial en el canal de YouTube para obtener una explicación detallada del código anterior.

Espero que hayas disfrutado leyendo y aprendido algo nuevo. Por favor, comparte este blog en tus redes sociales con tus amigos. Gracias y que tengas un gran día.