sql >> Base de Datos >  >> RDS >> Oracle

mostrar el conjunto de resultados del procedimiento almacenado de Oracle 10g

¿Hay algún error que vea cuando ejecuta este procedimiento o lo ejecuta en SQLPLUS? ¿Puede publicar su sesión de sqlplus tal como está?

PRINT es un comando específico de sqlplus y no se puede llamar dentro del bloque de procedimiento. Si necesita imprimir los resultados de un cursor de referencia dentro de un procedimiento, deberá buscarlo e imprimir cada registro en el formato que necesita.

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

También debe cambiar su procedimiento (o) la llamada del procedimiento para tener diferentes nombres de variables. En general, prefijo todas las variables de entrada con "i_" y todas las variables de salida con "o_". De esta manera, su declaración de procedimiento se vería así..

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 ....

y la llamada al procedimiento sería..

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

No necesita usar el ":" al principio para estas variables, ya que no son variables de entorno del host (este es el caso de su segunda ejecución usando SQLPLUS donde usa la variable sqlplus "rc" dentro de la llamada al procedimiento)