2014-03-24 44 views
1

我有这个Oracle表。为了开发的目的,我想在表中生成10,000个不同的值。我如何做到这一点?在表中生成10,000个随机值

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

到哪个列或哪些列?如果是CLOB,什么样的值 - 不同的长度等等? –

+0

是的,我想在随机生成的所有三列中插入不同的值。 –

回答

6

如果你正在寻找的只是一些在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=:f}Is/sR2L>F\7wCL)_V2              
/WBp Y)V5ZD.v                 
_yw(o_                   
b:5&E}7\a1Gt]X}$}e*-W[6U=1              
L<hQ:L^5}A(]<:}+8|-{.F%&`L              
G!L'Rbgiw/o]r~`[@9d6FUi3dc7              
.h_y;yeh`*rUK+\~8^i<G+;L76*              
ec}aL                   
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'[email protected];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 /'[email protected]+jOv3uFZC\z;^2+9GG~  24.03.14 19:59:02,214021766 +04:00  
     6 8vTh0}[HYBEDy{4\    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  
+0

如何为表中的随机值生成10 000行? –

+0

INSERT INTO ... SELECT ... FROM按级别<= 10000进行双连接应该对你有效。 –

+2

@PeterPenzov - 值得注意的是,'dbms_random.string'返回'varchar2';你当然可以把它放到'clob'列中,但是你的大小可能会受到限制,所以如果你真的需要大于4k(来自SQL)或大于32k(来自PL/SQL)的数据,你需要通过附加随机字符串来建立一个临时的clob。或者从其他地方复制现有值,如果你有足够大的值。 –

1

生成数据最简单的方法是使用其他数据库应用程序,如TOAD。 检查下面的图片。 enter image description here