sql >> Databasteknik >  >> RDS >> Oracle

Oracle lagrad procedur:returnera både resultatuppsättning och utparametrar

I Oracle kan du inte köra Direct Select-satser utan en INTO klausul.

Om du använder Oracle 12c och senare kan du använda en REF CURSOR och DBMS_SQL.RETURN_RESULT

create or replace procedure foo(empId IN NUMBER, maxSalary OUT NUMBER) AS
q SYS_REFCURSOR;
 BEGIN
    OPEN q FOR select * from Employee e where e.id >=empId;
     DBMS_SQL.return_result (q); -- This will display the result
    select max(salary) into maxSalary from Employee;
END;

För tidigare versioner (11g,10g) kan du skicka en REF CURSOR som en OUT parametern och skriv ut den från sqlplus eller TOAD genom att köra som skript.

create or replace procedure foo(empId IN NUMBER, maxSalary OUT NUMBER,
   q OUT SYS_REFCURSOR) AS

     BEGIN
        OPEN q FOR select * from Employee e where e.id >=empId;
        select max(salary) into maxSalary from Employee;
    END;

Definiera bindningsvariabler innan proceduren anropas.

VARIABLE v_empID NUMBER
VARIABLE v_maxsalary NUMBER
VARIABLE v_q REFCURSOR

EXEC :v_empID := 101
EXEC foo(:v_empID,:v_maxsalary,:v_q ) 
PRINT v_q -- This will display the result from the query.



  1. Oracle:laddar en stor xml-fil?

  2. Återställ tabellstruktur från frm- och ibd-filer

  3. Infoga bild i SQL Server 2005 Image Field med endast SQL

  4. PGEast, Hardware Benchmarking och PG Performance Farm