Y a-t-il une erreur que vous voyez lorsque vous exécutez cette procédure ou que vous l'exécutez dans SQLPLUS ? Pouvez-vous publier votre session sqlplus telle quelle ?
PRINT est une commande spécifique à sqlplus et ne peut pas être appelée à l'intérieur du bloc procédural. Si vous avez besoin d'imprimer les résultats d'un refcurseur à l'intérieur d'une procédure , vous devrez en extraire et imprimer chaque enregistrement dans le format dont vous avez besoin.
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
Vous devez également modifier votre procédure (ou) l'appel de procédure pour avoir des noms de variables différents.generallt, je préfixe toutes les variables d'entrée avec "i_" et toutes les variables de sortie avec "o_". De cette façon, votre déclaration de procédure ressemblerait à..
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 ....
et l'appel de procédure serait..
IFSINFO.SHORTAGE_SHEET( i_site => vsite,
i_buyer => vbuyer,
i_supplier => vsupplier,
o_cursor => vcursor);
Vous n'avez pas besoin d'utiliser le ":" au début de ces variables car ce ne sont pas des variables d'environnement hôte (c'est le cas pour votre deuxième exécution avec SQLPLUS où vous utilisez la variable sqlplus "rc" dans l'appel de procédure)