Допустим, у нас есть обычные таблицы Oracle Employees и Departments.
У меня также есть некоторые типы объектов Oracle:
- TEmployee: тип объекта, который имеет те же члены, что и поля в Table Employees.
- TEmployeeList: таблица объектов TEmployee.
- TDepartment: тип объекта, который имеет те же члены, что и поля в Table Departments.
- В 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;