Oracle
 sql >> Base de données >  >> RDS >> Oracle

Procédure stockée Oracle :renvoie à la fois l'ensemble de résultats et les paramètres de sortie

Dans Oracle, vous ne pouvez pas exécuter d'instructions de sélection directe sans un INTO clause.

Si vous utilisez Oracle 12c et supérieur, vous pouvez utiliser un REF CURSOR et 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;

Pour les versions précédentes (11g, 10g), vous pouviez passer un REF CURSOR en tant que OUT paramètre et imprimez-le depuis sqlplus ou TOAD en exécutant en tant que 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;

Définissez les variables de liaison avant d'appeler la procédure.

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.