在表中生成 10,000 个随机值

Posted

技术标签:

【中文标题】在表中生成 10,000 个随机值【英文标题】:Generate 10,000 random values in a table 【发布时间】:2014-03-24 14:48:18 【问题描述】:

我有这个 Oracle 表。出于开发目的,我想在表中生成 10,000 个不同的值。我该怎么做?

CREATE TABLE ERRORLOG(
  ERRORID INTEGER NOT NULL,
  ERRORCONTENT CLOB NOT NULL,
  ERRORDATE TIMESTAMP(6) NOT NULL
)

【问题讨论】:

进入哪一栏或几栏?如果是 CLOB,什么样的值——不同的长度等等? 是的,我想在所有三列中插入随机生成的不同值。 【参考方案1】:

如果您只是在 CLOB 中寻找混乱的东西(包括长度和内容),您可以使用 DBMS_RANDOM:

SQL> select DBMS_RANDOM.STRING('p',DBMS_RANDOM.VALUE(1,30)) rand_str from dual connect by level <= 10
  2  /

RAND_STR                                                                        
--------------------------------------------------------------------------------
#<a                                                                             
tV&Og8=:fIs/sR2L>F\7wCL)_V2                                                    
/WBp Y)V5ZD.v                                                                   
_yw(o_                                                                          
b:5&E7\a1Gt]X$e*-W[6U=1                                                      
L<hQ:L^5A(]<:+8|-.F%&`L                                                      
G!L'Rbgiw/o]r~`[@9d6FUi3dc7                                                     
.h_y;yeh`*rUK+\~8^i<G+;L76*                                                     
ecaL                                                                           
d3)UFT)S2kDA5    

并且同一个包可以用于在其他列中生成值(但我认为 ERRORID 是一个主键,所以你可以使用任何其他保证唯一性的方法——比如序列)。

SQL> create sequence seq_x;

SQL> select x_seq.nextval, DBMS_RANDOM.STRING('p',DBMS_RANDOM.VALUE(1,30)) rand_str,
systimestamp + numtodsinterval(DBMS_RANDOM.VALUE(1,40),'MINUTE') rand_ts 
from dual connect by level <= 10;

   NEXTVAL RAND_STR                        RAND_TS                               
---------- ------------------------------  -----------------------------------   
         1 a?=PK7yA|L8]d/)3!               24.03.14 19:47:18,750326032 +04:00    
         2 $N+K4vksVx(npxm^'#/%.Aay5$,     24.03.14 19:50:48,361699672 +04:00    
         3  ,7(1iX,2'E@i3u;wdg?.BB        24.03.14 19:35:15,711777571 +04:00    
         4 :S8x vj!m!:YI% fLCy8$\Y_C      24.03.14 19:43:41,088255060 +04:00    
         5 /'oFj@+jOv3uFZC\z;^2+9GG~       24.03.14 19:59:02,214021766 +04:00    
         6 8vTh0[HYBEDy4\                24.03.14 20:06:34,600594460 +04:00    
         37 >u w9q)]c7/hB_butzNR\Oi!hWwO<& 24.03.14 19:36:39,010531153 +04:00    
         8 >GwzDBT8!?g(<8;@I              24.03.14 19:51:52,118620451 +04:00    
         9 -] 'NxHUx46"_(df"8.u:6Pel"      24.03.14 19:44:04,152845952 +04:00    
        10 "HAJ                            24.03.14 20:00:24,933479299 +04:00    

【讨论】:

如何在我的表中生成 10 000 行随机值? INSERT INTO ... SELECT ... FROM dual connect by level @PeterPenzov - 值得注意的是 dbms_random.string 返回一个 varchar2;您当然可以将其放入 clob 列中,但是您可以生成的大小受到限制,因此如果您确实需要 > 4k(来自 SQL)或 > 32k(来自 PL/SQL)的数据,您将需要通过附加随机字符串来建立一个临时的clob。或者从其他地方复制一个现有值,如果你有一个足够大的值。【参考方案2】:

生成数据的最简单方法是使用 TOAD 等其他数据库应用程序。 检查下面的图片。

【讨论】:

以上是关于在表中生成 10,000 个随机值的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中生成非重复随机数

如何在数组中生成随机数,加起来达到定义的总数?

Next.js/React 在组件中生成随机值时发出警告

如何在java中生成随机时间戳?

在Javascript中生成2个值到2个小数位之间的随机数

如何在 Java 中生成 SALT 值?