Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Procedura składowana Oracle:zwróć zarówno zestaw wyników, jak i parametry wyjściowe

W Oracle nie można uruchamiać instrukcji bezpośredniego wyboru bez INTO klauzula.

Jeśli używasz Oracle 12c i nowszych, możesz użyć REF CURSOR i 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;

W przypadku poprzednich wersji (11g,10g) można było przekazać REF CURSOR jako OUT parametr i wydrukuj go z sqlplus lub TOAD, uruchamiając jako skrypt.

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;

Zdefiniuj zmienne powiązania przed wywołaniem procedury.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zip przy użyciu procedury składowanej Oracle

  2. Funkcja LITAGG:wynik konkatenacji ciągów jest za długi

  3. Jak używać sql * plus w skrypcie poleceń systemu Windows do sterowania przepływem?

  4. tworzenie widoków parametrycznych w oracle11g

  5. Encja Oracle w ramach encji VS nie aktualizuje klucza podstawowego w kodzie