首页 > 解决方案 > ORACLE:如何在一个查询中批量收集主数据和详细信息?

问题描述

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

标签: bulkoracle19c

解决方案


好的,我找到了:

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


推荐阅读