Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

exibir o conjunto de resultados do procedimento armazenado oracle 10g


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)