sql >> Database >  >> RDS >> Oracle

Opgeslagen Oracle-procedure:retourneer zowel de resultaatset als de out-parameters

In Oracle kunt u geen directe select-instructies uitvoeren zonder een INTO clausule.

Als u Oracle 12c en hoger gebruikt, kunt u een REF CURSOR . gebruiken en 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;

Voor eerdere versies (11g,10g), kunt u een REF CURSOR doorgeven als een OUT parameter en print deze uit sqlplus of TOAD door als script uit te voeren.

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;

Definieer bindvariabelen voordat u de procedure aanroept.

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. IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY in SQL Server:wat is het verschil?

  2. Heroku Postgres-fout:PGError:FOUT:relatieorganisaties bestaan ​​niet (ActiveRecord::StatementInvalid)

  3. Geen geldige maand tijdens het invoegen van gegevens in oracle

  4. MYSQL sum() voor verschillende rijen