【问题标题】:ORACLE: How to Bulk collect master & details in one query?ORACLE:如何在一个查询中批量收集主数据和详细信息?
【发布时间】:2019-11-06 13:07:47
【问题描述】:

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

【问题讨论】:

    标签: bulk oracle19c


    【解决方案1】:

    好的,我找到了:

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

    【讨论】:

      猜你喜欢
      • 2020-06-28
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 2018-02-13
      • 2016-05-17
      • 2015-07-02
      • 1970-01-01
      • 2020-03-25
      相关资源
      最近更新 更多