Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Gespeicherte Oracle-Prozedur:Gibt sowohl die Ergebnismenge als auch die Ausgangsparameter zurück

In Oracle können Sie keine direkten Select-Anweisungen ohne INTO ausführen Klausel.

Wenn Sie Oracle 12c und höher verwenden, können Sie einen REF CURSOR verwenden und 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 frühere Versionen (11g, 10g) könnten Sie einen REF CURSOR übergeben als OUT Parameter und drucken Sie ihn aus sqlplus oder TOAD durch Ausführen als 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;

Definieren Sie Bind-Variablen, bevor Sie die Prozedur aufrufen.

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.