sql >> Database teknologi >  >> RDS >> Oracle

Vis resultater fra oracle 10g lagret procedure

Er der en fejl, du ser, når du udfører denne procedure eller kører den i SQLPLUS? Kan du sende din sqlplus-session, som den er?

PRINT er en sqlplus-specifik kommando, og den kan ikke kaldes inde i den proceduremæssige blok. Hvis du har brug for at udskrive resultaterne af en refcursor inde i en procedure , så skal du hente fra den og udskrive hver post i det format, du har brug for.

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 også ændre din procedure (eller) procedurekaldet til at have forskellige variabelnavne.generallt, jeg præfikser alle inputvariabler med "i_" og alle outputvariabler med "o_". På denne måde vil din procedureerklæring se ud som...

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

og procedurekaldet ville være...

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

Du behøver ikke bruge ":" i begyndelsen for disse variable, da de ikke er værtsmiljøvariabler (dette er tilfældet for din anden udførelse ved brug af SQLPLUS, hvor du bruger sqlplus-variablen "rc" inde i procedurekaldet)



  1. Indvendig mens løkken ikke virker

  2. Sender Firesbase-meddelelse til flere brugere

  3. Hvordan fjerner man accenter og alle tegn <> a..z i sql-server?

  4. PHP/MySQL INSERT funktionslogikfejl