Finns det ett fel som du ser när du kör den här proceduren eller kör den i SQLPLUS? Kan du lägga upp din sqlplus-session som den är?
PRINT är ett sqlplus-specifikt kommando och det kan inte anropas i procedurblocket. Om du behöver skriva ut resultaten av en återgång i en procedur måste du hämta från den och skriva ut varje post i det format du behöver.
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
Du bör också ändra din procedur (eller) proceduranropet till att ha olika variabelnamn.generallt, jag prefixar alla indatavariabler med "i_" och alla utdatavariabler med "o_". På så sätt skulle din procedurdeklaration se ut...
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 ....
och proceduranropet skulle vara...
IFSINFO.SHORTAGE_SHEET( i_site => vsite,
i_buyer => vbuyer,
i_supplier => vsupplier,
o_cursor => vcursor);
Du behöver inte använda ":" i början för dessa variabler eftersom de inte är värdmiljövariabler (detta är fallet för din andra körning med SQLPLUS där du använder sqlplus-variabeln "rc" i proceduranropet)