sql >> Database >  >> RDS >> Oracle

resultatenset weergeven van Oracle 10g opgeslagen procedure

Is er een fout die u ziet wanneer u deze procedure uitvoert of uitvoert in SQLPLUS? Kunt u uw sqlplus-sessie posten zoals deze is?

PRINT is een sqlplus-specifieke opdracht en kan niet binnen het procedureblok worden aangeroepen. Als u de resultaten van een refcursor binnen een procedure moet afdrukken, moet u deze ophalen en elk record afdrukken in het formaat dat u nodig hebt.

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

U moet ook uw procedure (of) de procedureaanroep wijzigen om verschillende namen van variabelen te hebben. Algemeen, ik laat alle invoervariabelen voorafgaan door "i_" en alle uitvoervariabelen door "o_". Op deze manier zou uw procedureverklaring er als volgt uitzien..

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

en de procedure-aanroep zou zijn..

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

U hoeft de ":" in het begin niet te gebruiken voor deze variabelen omdat het geen hostomgevingsvariabelen zijn (dit is het geval voor uw tweede uitvoering met SQLPLUS waarbij u de sqlplus-variabele "rc" gebruikt in de procedureaanroep)



  1. Verschil van twee datums in sql-server

  2. converteer datumstring naar mysql datetime-veld

  3. Geef wachtwoord door aan mysql_config_editor met variabele in shell

  4. Ververs een PHP-pagina voor elke vooraf gedefinieerde seconden