Oracle中批量生成测试数据时如何按80%/20%比例设置Ingested字段值
Oracle中批量生成测试数据时如何按80%/20%比例设置Ingested字段值
嗨,你的思路完全没问题,用CASE语句配合Oracle的随机函数就能轻松实现这个80%/20%的比例需求!我直接给你调整好SQL,再给你拆解下逻辑:
insert into uploads (id, id_batch, file_name, upload_date, ingested) select rownum+4000 as id, id as id_batch, 'Batch' || batch.start_date || ' ' || rownum as file_name, batch.start_date, -- 核心逻辑:用随机数判断设置Y/N CASE WHEN DBMS_RANDOM.VALUE() <= 0.8 THEN 'Y' ELSE 'N' END as ingested from batch cross join lateral ( select level from dual where batch.id = batch.id connect by level <= dbms_random.value(50,250) );
逻辑说明:
DBMS_RANDOM.VALUE()默认会生成一个0到1之间的均匀分布随机数,所以当随机数≤0.8时返回'Y',剩下的返回'N',长期统计下来正好是80%/20%的比例,完全匹配你的需求。- 你原来的批量生成逻辑(通过cross join生成50-250条对应数据)不需要改动,只需要把固定的'Y'替换成这个CASE表达式就行。
如果需要让测试数据的比例更稳定,或者想要重复生成相同的随机结果(方便调试),可以在执行这个SQL前先设置随机种子,比如:
EXEC DBMS_RANDOM.SEED(12345); -- 固定种子后,每次生成的随机序列一致
这样调整后,你的批量测试数据就能完美满足80%已 ingest、20%未 ingest的要求啦!
备注:内容来源于stack exchange,提问作者SunnyMoon
相关产品推荐
相关产品推荐

