sql >> Databáze >  >> RDS >> Oracle

zobrazit sadu výsledků z uložené procedury oracle 10g

Objevila se při provádění tohoto postupu nebo jeho spuštění v SQLPLUS nějaká chyba? Můžete relaci sqlplus zveřejnit tak, jak je?

PRINT je specifický příkaz sqlplus a nelze jej volat uvnitř procedurálního bloku. Pokud potřebujete vytisknout výsledky rekurzoru uvnitř procedury , budete z něj muset načíst a vytisknout každý záznam ve formátu, který potřebujete.

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

Měli byste také změnit svou proceduru (nebo) volání procedury tak, aby měla jiné názvy proměnných.generallt, předponu všem vstupním proměnným na „i_“ a všem výstupním proměnným na „o_“. Tímto způsobem by vaše deklarace procedury vypadala...

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 volání procedury by bylo...

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

Pro tyto proměnné nemusíte na začátku používat ":", protože se nejedná o proměnné hostitelského prostředí (to je případ vašeho druhého spuštění pomocí SQLPLUS, kde používáte proměnnou sqlplus "rc" uvnitř volání procedury)



  1. Zkopírujte více souborů CSV do postgresu

  2. Datum formátování pro Postgresql

  3. Knihovna není načtena:@rpath/libmysqlclient.21.dylib Důvod:obrázek nebyl nalezen Chyba migrace Django pomocí ovladače mysqlclient DB a MySQL 8 s macOS

  4. Oracle SQL:Výběr jednoho řádku s nejnovějším datem mezi více sloupci