¿Hay algún error que vea cuando ejecuta este procedimiento o lo ejecuta en SQLPLUS? ¿Puede publicar su sesión de sqlplus tal como está?
PRINT es un comando específico de sqlplus y no se puede llamar dentro del bloque de procedimiento. Si necesita imprimir los resultados de un cursor de referencia dentro de un procedimiento, deberá buscarlo e imprimir cada registro en el formato que necesita.
SQL> create or replace procedure test_REFCURSOR (
2 i_number in number,
3 o_cursor out sys_refcursor)
4 as
5 begin
6 open o_cursor for
7 'select empno, ename from emp
8 where rownum < ' || i_number ;
9 end;
10 /
Procedure created.
SQL> variable rc refcursor;
SQL> exec test_refcursor(5, :rc);
PL/SQL procedure successfully completed.
SQL> print rc;
EMPNO ENAME
---------- ----------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
También debe cambiar su procedimiento (o) la llamada del procedimiento para tener diferentes nombres de variables. En general, prefijo todas las variables de entrada con "i_" y todas las variables de salida con "o_". De esta manera, su declaración de procedimiento se vería así..
CREATE OR REPLACE PROCEDURE IFSINFO.SHORTAGE_SHEET (i_Site IN VARCHAR2,
i_Buyer IN VARCHAR2,
i_Supplier IN VARCHAR2,
o_Cursor OUT SYS_REFCURSOR) AS ....
y la llamada al procedimiento sería..
IFSINFO.SHORTAGE_SHEET( i_site => vsite,
i_buyer => vbuyer,
i_supplier => vsupplier,
o_cursor => vcursor);
No necesita usar el ":" al principio para estas variables, ya que no son variables de entorno del host (este es el caso de su segunda ejecución usando SQLPLUS donde usa la variable sqlplus "rc" dentro de la llamada al procedimiento)