Oracle
 sql >> Database >  >> RDS >> Oracle

visualizza il set di risultati dalla procedura memorizzata di Oracle 10g

C'è un errore che vedi quando esegui questa procedura o la esegui in SQLPLUS?Puoi pubblicare la tua sessione sqlplus così com'è?

PRINT è un comando specifico di sqlplus e non può essere chiamato all'interno del blocco procedurale. Se devi stampare i risultati di un Refcursor all'interno di una procedura , dovrai recuperarlo e stampare ogni record nel formato che ti serve.

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

Dovresti anche cambiare la tua procedura (o) la chiamata della procedura per avere nomi di variabili diversi.generallt, io prefisso tutte le variabili di input con "i_" e tutte le variabili di output con "o_". In questo modo, la tua dichiarazione di procedura sembrerebbe...

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 la chiamata alla procedura sarebbe..

IFSINFO.SHORTAGE_SHEET(    i_site     => vsite,
                           i_buyer    => vbuyer,
                           i_supplier => vsupplier,
                           o_cursor   => vcursor);

Non è necessario utilizzare ":" all'inizio per queste variabili poiché non sono variabili di ambiente host (questo è il caso della seconda esecuzione utilizzando SQLPLUS in cui si utilizza la variabile sqlplus "rc" all'interno della chiamata di procedura)