03.01.2012

Конвейерные (pipelined) функции

Функции Oracle, возвращающие таблицу

Создадим две таблицы - сотрудников и подразделений.
create table ALEX.T_EMPLOYEES(
id number(5) not null,
id_department number(5) not null,
empinfo nvarchar2(50) not null
) ;
create table ALEX.T_DEPARTMENTS(
id number(5) not null,
depinfo nvarchar2(50) not null
);
Цель - написать функцию, которая бы возвращала список сотрудников отдела, id которого передается в качестве параметра.
Для начала нам нужно описать тип данных, возвращаемый таблицей.
--тип данных строки, возвращаемой GetEmployees
type rowGetEmployees is record(
l_empinfo ALEX.T_EMPLOYEES.EMPINFO%TYPE,
l_depinfo ALEX.T_DEPARTMENTS.DEPINFO%TYPE
);
Это тип данных строки. Создаем второй тип:
type tblGetEmployees is table of rowGetEmployees;
Это тип таблицы строк типа rowGetEmployees. Функция:
function GetEmployees
(prm_depID number default null)
return tblGetEmployees
pipelined
is
begin
for curr in
(
select emp.empinfo, dep.depinfo
from ALEX.T_DEPARTMENTS dep inner join
ALEX.T_EMPLOYEES emp on dep.id = emp.id_department
where dep.id = prm_depID
) loop
pipe row (curr);
end loop;
end GetEmployees;
Применение:
SQL> select * from TABLE(ALEX.P_MY1.GetEmployees(1));
L_EMPINFO                     L_DEPINFO
---------------------------------------------------
Иванов   ----------------- Отдел кадров
Борисов   ----------------- Отдел кадров

Комментариев нет :