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

如何修改Oracle SQL语句生成大量随机数据插入BLOB列?

解决方案

方案1:生成固定内容的大RAW数据

如果不需要随机内容,直接生成重复的固定字节(比如全0x01),用RPAD配合UTL_RAW.CAST_TO_RAW可以快速生成指定长度的RAW数据。示例中生成1KB(1024字节)的内容:

INSERT INTO a.b(DATA, ID, ORDER_ID)
SELECT 
  UTL_RAW.CAST_TO_RAW(RPAD('1', 1024, '1')), -- 生成1024字节的重复'1'并转成RAW
  RAW_TO_GUID(SYS_GUID()),
  level
FROM dual
CONNECT BY level <= 100000
AND PRIOR SYS_GUID() IS NOT NULL; -- 避免Oracle递归优化,确保生成10万行

可调整RPAD的第二个参数改变DATA字段大小,比如4096对应4KB,按需设置即可。

方案2:生成随机大RAW数据

如果需要随机内容的大字段,用Oracle自带的UTL_RANDOM.RAW函数直接生成指定长度的随机RAW数据,效率很高:

INSERT INTO a.b(DATA, ID, ORDER_ID)
SELECT 
  UTL_RANDOM.RAW(1024), -- 生成1024字节的随机RAW数据
  RAW_TO_GUID(SYS_GUID()),
  level
FROM dual
CONNECT BY level <= 100000
AND PRIOR DBMS_RANDOM.VALUE() IS NOT NULL; -- 防止递归优化

UTL_RANDOM.RAW的参数最大支持32767,足够覆盖大部分调试场景的大字段需求。

方案3:生成Base64编码后转RAW(可选)

如果需要模拟Base64相关处理逻辑,可以先生成随机RAW再转Base64字符串,最后转回RAW:

INSERT INTO a.b(DATA, ID, ORDER_ID)
SELECT 
  UTL_ENCODE.BASE64_DECODE(UTL_RAW.CAST_TO_RAW(UTL_ENCODE.BASE64_ENCODE(UTL_RANDOM.RAW(1024)))),
  RAW_TO_GUID(SYS_GUID()),
  level
FROM dual
CONNECT BY level <= 100000
AND PRIOR SYS_GUID() IS NOT NULL;

注意事项

  • 生成10万行时,CONNECT BY后必须加PRIOR [随机函数] IS NOT NULL,否则Oracle会因递归优化只生成一行数据。
  • 如果DATA字段类型是BLOB,可改用UTL_RAW.CAST_TO_BLOB转换,比如UTL_RAW.CAST_TO_BLOB(UTL_RANDOM.RAW(1024))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:55:12