sql >> Databasteknik >  >> RDS >> Oracle

visa resultat från oracle 10g lagrad procedur

Finns det ett fel som du ser när du kör den här proceduren eller kör den i SQLPLUS? Kan du lägga upp din sqlplus-session som den är?

PRINT är ett sqlplus-specifikt kommando och det kan inte anropas i procedurblocket. Om du behöver skriva ut resultaten av en återgång i en procedur måste du hämta från den och skriva ut varje post i det format du behöver.

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

Du bör också ändra din procedur (eller) proceduranropet till att ha olika variabelnamn.generallt, jag prefixar alla indatavariabler med "i_" och alla utdatavariabler med "o_". På så sätt skulle din procedurdeklaration se ut...

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

och proceduranropet skulle vara...

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

Du behöver inte använda ":" i början för dessa variabler eftersom de inte är värdmiljövariabler (detta är fallet för din andra körning med SQLPLUS där du använder sqlplus-variabeln "rc" i proceduranropet)



  1. Så här kontrollerar du datumformatet för din Oracle-session

  2. php mysql PDO får fatalt fel när 2 funktioner anropas för att köra sql-satsen i samma fil

  3. Två där villkor för samma kolumn använder grupp efter

  4. MySQL visar antalet 0 för datum utan uppgifter