Existe um erro que você vê ao executar este procedimento ou executá-lo no SQLPLUS? Você pode postar sua sessão sqlplus como está?
PRINT é um comando específico do sqlplus e não pode ser chamado dentro do bloco procedural. Se você precisar imprimir os resultados de um refcursor dentro de um procedimento , precisará buscá-lo e imprimir cada registro no formato necessário.
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
Você também deve alterar seu procedimento (ou) a chamada de procedimento para ter nomes de variáveis diferentes.generallt, prefixo todas as variáveis de entrada com "i_" e todas as variáveis de saída com "o_". Dessa forma, sua declaração de procedimento ficaria assim.
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 ....
e a chamada do procedimento seria ..
IFSINFO.SHORTAGE_SHEET( i_site => vsite,
i_buyer => vbuyer,
i_supplier => vsupplier,
o_cursor => vcursor);
Você não precisa usar o ":" no início para essas variáveis, pois elas não são variáveis de ambiente do host (este é o caso da sua segunda execução usando SQLPLUS, onde você usa a variável sqlplus "rc" dentro da chamada do procedimento)