sql >> Base de Datos >  >> RDS >> Oracle

Procedimiento almacenado de Oracle:devolver tanto el conjunto de resultados como los parámetros de salida

En Oracle, no puede ejecutar declaraciones de selección directa sin un INTO cláusula.

Si está usando Oracle 12c y superior, puede usar un REF CURSOR y 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;

Para versiones anteriores (11g, 10g), podría pasar un REF CURSOR como OUT parámetro e imprimirlo desde sqlplus o TOAD ejecutándose como script.

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;

Defina variables de vinculación antes de llamar al procedimiento.

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.