0

假设我们有通常的 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;
4

1 回答 1

0

好的,我找到了:

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)就是我添加的。

于 2019-11-06T13:38:21.720 回答