Мне нужно вернуть значение из процедуры, набора записей и одного значения (извлечение из набора записей)
CREATE TABLE EMP
(
EMP_ID number;
EMP_NAME varchar2(20);
EMP_FLAG char(1);
);
CREATE TABLE SALARY
(
EMP_ID number;
EMP_SAL number;
);
BEGIN
insert into EMP values(10,'John','N');
insert into EMP values(20,'May','Y');
insert into SALARY values(10,10000);
insert into SALARY values(10,25000);
END;
/
Вот моя процедура
CREATE OR REPLACE PROCEDURE TEST(Flag in char(1),curEMP out SYS_REFCURSOR,Sal out number)
v_sal number;
v_emp_id number;
v_name varchar2(20);
AS
open curEMP for
select e.emp_id
,e.emp_name
,s.sal
from emp e
left join sal s on e.emp_id = s.emp_id
where e.emp_flag = Flag;
loop
fetch curEMP into v_emp_id,v_name,v_Sal; --in real life there are more than 20+ fields
exit when curEMP%notfound;
end loop;
Sal := v_sal;
END TEST;
/
Скрипт для вызова процедуры
set serveroutput on;
variable cr refcursor;
variable sal number;
exec TEST('Y',:cr,:sal);
print cr;
print sal;
Вот вывод
Вывод
sal
25000
Однако мне нужен вывод, подобный этому
- Вывод из списка курсоров
emp_id emp_name sal
20 May 25000
- от переменной переменной
sal
25000