Допустим, у нас есть обычные таблицы сотрудников и отделов Oracle.
У меня также есть несколько типов объектов Oracle:
- TEmployee: тип объекта, имеющий те же члены, что и поляв таблице Сотрудники.
- TEmployeeList: таблица объектов TEmployee.
- TDepartment: тип объекта, который имеет те же члены, что и поля в таблицах Отделов.
- TDepartment также имеетчлен "сотрудники" типа TEmployeeList. TDepartmentList: таблица объектов TDepartment.
Теперь я хочу собрать несколько отделов вместе со своими сотрудниками в одном запросе.
Я знаю, как массово собирать отделы безсотрудников:
DECLARE
departmentList TDepartmentList;
BEGIN
SELECT TDepartment(dept.id, dept.name)
BULK COLLECT INTO departmentList
FROM departments dept
WHERE <some condition>;
END;
Но как мне собрать сотрудников выбранных отделов в одном запросе?
Таким образом, что-то вроде
DECLARE
departmentList TDepartmentList;
BEGIN
SELECT TDepartment(dept.id, dept.name,
SELECT TEmployee(emp.id, emp.name)
FROM Employees
WHERE emp.deptId = dept.id
)
BULK COLLECT INTO departmentList
FROM departments dept
WHERE <some condition>;
END;