Oracle
 sql >> база данни >  >> RDS >> Oracle

Запомнена процедура на Oracle:връща както набор от резултати, така и изходни параметри

В Oracle не можете да изпълнявате директни оператори за избор без INTO клауза.

Ако използвате Oracle 12c и по-нова версия, можете да използвате REF CURSOR и 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;

За предишни версии (11g,10g) можете да подадете REF CURSOR като OUT параметър и го отпечатайте от sqlplus или TOAD, като стартирате като скрипт.

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;

Дефинирайте свързващите променливи, преди да извикате процедурата.

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. Oracle:множество актуализации на таблици => ORA-01779:не може да промени колона, която се съпоставя с таблица без ключ

  2. Стъпка по стъпка R12.2.6 Инсталиране на EBS на Virtual Box Част -2

  3. Връзката спира след време на неактивност

  4. Как да изпълните .SQL скриптов файл с помощта на c#

  5. Стойностите не се показват с водеща нула в оракул