Oracle
 sql >> Baza danych >  >> RDS >> Oracle

wyświetl zestaw wyników z procedury przechowywanej Oracle 10g

Czy wystąpił błąd, który widzisz podczas wykonywania tej procedury lub uruchamiania jej w SQLPLUS? Czy możesz opublikować sesję sqlplus tak, jak jest?

PRINT jest poleceniem specyficznym dla sqlplus i nie można go wywołać wewnątrz bloku proceduralnego. Jeśli chcesz wydrukować wyniki refcursora wewnątrz procedury , musisz pobrać z niej i wydrukować każdy rekord w wymaganym formacie.

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

Powinieneś również zmienić swoją procedurę (lub) wywołanie procedury, aby mieć różne nazwy zmiennych.generallt, wszystkie zmienne wejściowe poprzedzam "i_" i wszystkie zmienne wyjściowe "o_". W ten sposób Twoja deklaracja procedury będzie wyglądać jak...

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

a wywołanie procedury byłoby...

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

Nie musisz używać ":" na początku dla tych zmiennych, ponieważ nie są to zmienne środowiskowe hosta (tak jest w przypadku twojego drugiego wykonania przy użyciu SQLPLUS, gdzie używasz zmiennej sqlplus "rc" wewnątrz wywołania procedury)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problem z wydajnością hibernacji w przypadku relacji OneToMany / nullable

  2. NetSuite zapisał formułę wyszukiwania, aby pomnożyć wyniki z dwóch innych kolumn

  3. Importuj obiekt blob przez SAS z ORACLE DB

  4. Jak wyświetlić listę wszystkich tabel używanych w określonej procedurze składowanej w Oracle?

  5. R12.2 Określanie i konfiguracja edycji