Oracle中用union all插入多条数据
时间: 2024-10-15 12:26:59 浏览: 7
在Oracle中,`UNION ALL` 是一个用于合并两个或更多SELECT语句的结果集,返回的结果集包含了所有输入结果集中行的不重复组合。如果你想一次性插入多条数据,你可以使用`UNION ALL` 结合 `INTO` 关键字来实现类似于批量插入的功能,但这并不是标准的插入语句,而是利用了SQL的特性。以下是一个例子:
```sql
DECLARE
v_data_type1 CURSOR FOR
SELECT 'data1_value1', 'data1_value2'
FROM table1;
v_data_type2 CURSOR FOR
SELECT 'data2_value1', 'data2_value2'
FROM table2;
BEGIN
OPEN v_data_type1;
LOOP
FETCH v_data_type1 BULK COLLECT INTO l_data; -- 存储待插入的记录列表
EXIT WHEN v_data_type1%NOTFOUND;
INSERT ALL
INTO table3 (column1, column2)
SELECT value1, value2
FROM TABLE(l_data);
END LOOP;
CLOSE v_data_type1;
OPEN v_data_type2;
LOOP
FETCH v_data_type2 BULK COLLECT INTO l_data; -- 这里也类似地操作
EXIT WHEN v_data_type2%NOTFOUND;
INSERT ALL
INTO table3 (column1, column2)
SELECT value1, value2
FROM TABLE(l_data);
END LOOP;
CLOSE v_data_type2;
END;
/
```
在这个例子中,我们首先打开两个游标分别从table1和table2获取数据,然后通过`FETCH BULK COLLECT INTO`收集数据到数组`l_data`,最后将这些数据批量插入到table3中。
请注意,这种做法并不是官方推荐的最佳实践,因为它涉及到游标的使用以及手动管理内存。实际生产环境中,可能会有更高效的批处理插入方法,比如使用BULK INSERT或者程序化的方式。