Apakah ada kesalahan yang Anda lihat saat Anda menjalankan prosedur ini atau menjalankannya di SQLPLUS? Dapatkah Anda memposting sesi sqlplus Anda apa adanya?
PRINT adalah perintah khusus sqlplus dan tidak dapat dipanggil di dalam blok prosedural. Jika Anda perlu mencetak hasil refkursor di dalam procedure , maka Anda harus mengambilnya dan mencetak setiap record dalam format yang Anda butuhkan.
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
Anda juga harus mengubah prosedur Anda (atau) panggilan prosedur untuk memiliki nama variabel yang berbeda.generallt, saya mengawali semua variabel input dengan "i_" dan semua variabel output dengan "o_". Dengan cara ini, deklarasi prosedur Anda akan terlihat seperti..
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 ....
dan panggilan prosedurnya adalah..
IFSINFO.SHORTAGE_SHEET( i_site => vsite,
i_buyer => vbuyer,
i_supplier => vsupplier,
o_cursor => vcursor);
Anda tidak perlu menggunakan ":" di awal untuk variabel ini karena mereka bukan variabel lingkungan host ( ini adalah kasus untuk eksekusi kedua Anda menggunakan SQLPLUS di mana Anda menggunakan variabel sqlplus "rc" di dalam panggilan prosedur)