В 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.