bulk - ORACLE:如何在一个查询中批量收集主数据和详细信息?
问题描述
假设我们有通常的 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;
解决方案
好的,我找到了:
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)
就是我添加的。
推荐阅读
- python - 遍历 df 行并附加到没有名称和 dtype 的列表
- grafana - 仅使用堆叠图的总和创建 Grafana 统计量
- android - 在相机/预览运行时显式更改 CameraX 焦点?(不仅仅是在构建相机时。)
- c# - 在 ASP.NET MVC 中使用 Ajax 发布多个模型对象
- git - 如何从 git 仅获取真实的分支名称以使用它们进行批量更改
- arrays - Powershell 脚本检查然后添加多个驱动程序
- libreoffice-calc - 如何在 libreoffice calc 中实现多个或条件
- angular - 在更新选定列表时获取输出列表(checkedCitiesList)中的重复列表(选择或取消选择列表或个人)
- reactjs - 如何以编程方式从 Firebase 下载/保存图像?
- javascript - 如何在 JavaScript 中的 if 语句中添加更多变量