假设我们有通常的Oracle员工和部门表。
我也有一些Oracle对象类型:
现在,我想在单个查询中与他们的员工一起批量收集多个部门。
我知道如何在没有员工的情况下大批收集部门:
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;
好,我找到了:
DECLARE
departmentList TDepartmentList;
BEGIN
SELECT TDepartment(dept.id, dept.name,
CAST(MULTISET(
SELECT TEmployee(emp.id, emp.name)
FROM Employees
WHERE emp.deptId = dept.id
) AS TEmployeeList))
)
BULK COLLECT INTO departmentList
FROM departments dept
WHERE <some condition>;
END;
所以CAST(MULTISET( query ) AS TEmployeeList)
是我添加的。