You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不使用FOR LOOP如何批量插入100万条dummy测试记录?

Oracle 无FOR循环批量插入百万条测试数据实现方案

现有循环方案(当前使用写法)

CREATE TABLE dummy_records (
dummy_id number not null,
dummy_name varchar2(100)
);

BEGIN
    FOR loop_counter IN 1..1000000 LOOP
    INSERT INTO dummy_records (dummy_id, dummy_name) VALUES (loop_counter, dbms_random.value(1,100)); 
    END LOOP; 
END;
/

无循环替代方案

方案1:CONNECT BY层级查询(推荐,兼容性高、性能最优)

单条INSERT即可完成批量写入,无需显式编写循环逻辑,执行效率远高于逐行插入的循环写法:

-- 建表语句同上
CREATE TABLE dummy_records (
dummy_id number not null,
dummy_name varchar2(100)
);

-- 一次性插入100万条测试数据
INSERT INTO dummy_records (dummy_id, dummy_name)
SELECT 
  LEVEL,
  dbms_random.value(1,100)
FROM dual
CONNECT BY LEVEL <= 1000000;
COMMIT;

说明:LEVEL是Oracle层级查询的内置伪列,会从1开始自动递增到CONNECT BY子句指定的上限,直接生成对应行数的结果集,完成批量插入。

方案2:递归CTE写法

如果习惯用通用表达式实现,也可以用递归CTE生成序列:

-- 先调整会话递归深度上限,否则默认1000层会报错
ALTER SESSION SET RECURSIVE_CTE_MAX_DEPTH = 1000000;

WITH t(n) AS (
  SELECT 1 FROM dual
  UNION ALL
  SELECT n+1 FROM t WHERE n < 1000000
)
INSERT INTO dummy_records (dummy_id, dummy_name)
SELECT n, dbms_random.value(1,100) FROM t;
COMMIT;

内容的提问来源于stack exchange,提问作者stocke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 21:36:08