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 CURSOR
y úsalo como un OUT
parámetro en un procedimiento almacenado.
No hay diferencia entre usar un tipo declarado como REF CURSOR
y usando SYS_REFCURSOR
porque 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.sql
y 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.