Saltar al contenido

Usando ref cursor vs sys_refcursor dentro de los parámetros de un procedimiento almacenado

Después de investigar en diversos repositorios y sitios webs al final nos hemos encontrado la respuesta que te compartimos más adelante.

Solución:

No estoy seguro de lo que quieres decir con

create or replace procedure GetEmployeesInDept( c out ref cursor)

No he visto esto antes y no puedo obtener un procedimiento declarado como este para compilar. ¿Podría proporcionar un código de muestra o enlaces a lugares donde haya visto esto antes?

Lo que podrías haber visto es algo como lo siguiente:

CREATE OR REPLACE PACKAGE demo AS

  TYPE ref_cursor IS REF CURSOR;

  PROCEDURE GetEmployeesInDept(c OUT ref_cursor);

END demo;
/

CREATE OR REPLACE PACKAGE BODY demo AS

  PROCEDURE GetEmployeesInDept(c OUT ref_cursor)
  IS
  BEGIN
    RAISE NO_DATA_FOUND;
  END GetEmployeesInDept;

END demo;
/

En este caso, declaramos que un tipo es un REF CURSORy úsalo como un OUT parámetro en un procedimiento almacenado.

No hay diferencia entre usar un tipo declarado como REF CURSOR y usando SYS_REFCURSORporque SYS_REFCURSOR se define en el STANDARD paquete como un REF CURSOR de la misma manera que declaramos el tipo ref_cursor. De hecho, si está utilizando Oracle 9i o posterior, busque dentro de la instalación de su base de datos Oracle, en %ORACLE_HOME%rdbmsadminstdspec.sqly debería encontrar la siguiente línea en algún lugar allí:

type sys_refcursor is ref cursor;

SYS_REFCURSOR se introdujo en Oracle 9i. Puede encontrar varios tipos declarados como REF CURSOR en código PL/SQL escrito antes del lanzamiento de Oracle 9i.

Puede haber una diferencia entre los dos, puedo pensar que es ref_cursor puede ser STRONG o WEAK tipo mientras que SYS_REFCURSOR siempre es de tipo débil, ya que se define de esa manera.

Hay dos formas de cursor de referencia: el REF CURSOR fuerte y el REF CURSOR débil. PL/SQL es un lenguaje de tipado estático, y el REF CURSOR débil es una de las pocas construcciones de tipado dinámico admitidas.

(lenguaje escrito estáticamente: eso significaba que la verificación de tipo se realiza en tiempo de compilación, no en tiempo de ejecución)

Cuando definió un SYS_REFCURSOR es un tipo de REF CURSOR débil predefinido.

Un cursor de referencia fuerte es algo como esto:

TIPO book_data_t IS REF CURSOR RETURN book%ROWTYPE;

causa asociar la variable de cursor con una estructura de registro específica.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

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