如何通过SQL Developer向Oracle现有表一次性插入200行模拟数据
Oracle 非生产环境批量插入200行测试数据实现方案
以下方案都可以直接在SQL Developer中执行,无需重复编写单条INSERT语句,按易用性排序:
- 方案1:CONNECT BY 层级查询生成(最推荐,全dummy数据首选)
利用Oracle原生的层级查询语法直接生成200行序列数据,无需依赖额外对象,单条SQL即可完成。
假设你的目标表为your_table_name,包含id、user_name、create_time、status四个常见字段,示例代码如下:
INSERT INTO your_table_name (id, user_name, create_time, status) SELECT level AS id, -- 生成1-200的自增序列作为主键 'test_user_' || level AS user_name, -- 拼接生成测试用户名 SYSDATE - DBMS_RANDOM.VALUE(1, 365) AS create_time, -- 随机生成近1年的创建时间 CASE WHEN MOD(level, 2) = 0 THEN 'VALID' ELSE 'INVALID' END AS status -- 交替生成状态值 FROM dual CONNECT BY level <= 200; -- 确认数据无误后执行提交,有误则执行ROLLBACK回滚 COMMIT;
你可以根据自己的表字段调整生成规则:需要随机字符串用DBMS_RANDOM.STRING('x', 10)(生成长度10的混合大小写字符串),需要随机数值用DBMS_RANDOM.VALUE(1,1000)即可。
- 方案2:INSERT ALL 多值插入(适合有固定测试值的场景)
如果你有部分测试数据需要指定固定值,不需要按规则自动生成,可以用INSERT ALL语法,省略重复的INSERT INTO前缀:
INSERT ALL INTO your_table_name (id, user_name, create_time, status) VALUES (1, 'fixed_admin', SYSDATE, 'VALID') INTO your_table_name (id, user_name, create_time, status) VALUES (2, 'fixed_guest', SYSDATE, 'INVALID') -- 按需追加剩余行即可,无需重复写INSERT INTO SELECT * FROM dual; COMMIT;
- 方案3:PL/SQL匿名块循环插入(适合复杂逻辑场景)
如果测试数据需要关联字段逻辑(比如外键匹配、多字段联动规则),直接写匿名块在SQL Developer执行即可,不需要创建存储过程:
BEGIN FOR i IN 1..200 LOOP INSERT INTO your_table_name (id, user_name, create_time, status) VALUES ( i, 'batch_user_' || i, SYSDATE - INTERVAL '1' HOUR * i, -- 每一行创建时间比上一行早1小时 DECODE(MOD(i,3), 0, 'PENDING', 1, 'VALID', 'INVALID') ); END LOOP; COMMIT; END; /
执行提示:正式插入前可以先把INSERT部分改成SELECT执行预览,确认生成的数据字段类型、长度符合表约束,避免插入报错;未执行COMMIT前如果发现数据不符合预期,直接执行
ROLLBACK;即可撤销操作。
内容的提问来源于stack exchange,提问作者007_programmer
相关产品推荐
相关产品推荐

