Oracle如何从另一张表提取对象插入嵌套表字段
从关联表提取数据插入嵌套表字段的实现方法
以下是主流数据库的常用实现方案:
Oracle 数据库(嵌套表场景最常用)
Oracle 嵌套表插入需要用 CAST + MULTISET 语法将查询结果转换为提前定义的嵌套表类型,分两种常用场景:
单条Ocurrences记录插入
直接在VALUES子句中嵌套查询转换:
INSERT INTO Ocurrences (你的其他字段名, oSpace) VALUES ( 你的其他字段值, -- 将Spaces查询结果转为嵌套表类型 CAST( MULTISET(SELECT * FROM Spaces WHERE 筛选条件) AS 你定义的oSpace对应的嵌套表类型名 -- 示例:nt_space_type ) );
批量关联插入
如果需要批量生成Ocurrences记录,每条的oSpace从Spaces关联获取,用INSERT ... SELECT语法:
INSERT INTO Ocurrences (你的其他字段名, oSpace) SELECT 业务表.其他字段值, CAST( MULTISET(SELECT s.* FROM Spaces s WHERE s.关联字段 = 业务表.关联字段) AS 你定义的oSpace对应的嵌套表类型名 ) FROM 你的业务数据表;
PostgreSQL 数据库(类嵌套表的数组/复合类型场景)
PostgreSQL可以直接用ARRAY函数包装查询结果:
INSERT INTO Ocurrences (你的其他字段名, oSpace) VALUES ( 你的其他字段值, ARRAY(SELECT ROW(s.*)::你定义的复合类型名 FROM Spaces s WHERE 筛选条件) );
注意事项
- 嵌套查询返回的字段数量、字段类型必须和嵌套表的元素结构完全一致,否则会触发类型不匹配报错
- 代码中的
你定义的oSpace对应的嵌套表类型名需要替换为你创建oSpace字段时声明的集合类型名称
内容的提问来源于stack exchange,提问作者Yorwe
相关产品推荐
相关产品推荐

