ORACLE:如何在一个查询中批量收集主数据和详细信息?

问题描述 投票:0回答:1

假设我们有通常的Oracle员工和部门表。

我也有一些Oracle对象类型:

  • TEmployee:与表Employees中的字段具有相同成员的对象类型。
  • 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;
bulk oracle19c
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)是我添加的。

© www.soinside.com 2019 - 2024. All rights reserved.