Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Ergebnismenge der gespeicherten Prozedur von Oracle 10g anzeigen

Gibt es einen Fehler, den Sie sehen, wenn Sie diese Prozedur ausführen oder in SQLPLUS ausführen? Können Sie Ihre sqlplus-Sitzung so posten, wie sie ist?

PRINT ist ein sqlplus-spezifischer Befehl und kann nicht innerhalb des prozeduralen Blocks aufgerufen werden. Wenn Sie die Ergebnisse eines Refcursors innerhalb einer Prozedur ausgeben müssen, müssen Sie daraus holen und jeden Datensatz in dem Format drucken, das Sie benötigen.

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

Sie sollten auch Ihre Prozedur (oder) den Prozeduraufruf ändern, um andere Variablennamen zu haben. Allgemeint, ich stelle allen Eingabevariablen ein "i_" und allen Ausgabevariablen ein "o_" voran. Auf diese Weise würde Ihre Prozedurdeklaration wie folgt aussehen..

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

und der Prozeduraufruf wäre..

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

Sie müssen das ":" am Anfang für diese Variablen nicht verwenden, da es sich nicht um Umgebungsvariablen des Hosts handelt (dies ist bei Ihrer zweiten Ausführung mit SQLPLUS der Fall, wo Sie die sqlplus-Variable "rc" innerhalb des Prozeduraufrufs verwenden)