在Oracle表中插入随机数据

时间:2015-11-22 21:28:14

标签: sql oracle plsql oracle11g

我想在Oracle表中创建随机数据:

CREATE TABLE EVENTS(
  EVENTID INTEGER NOT NULL,
  SOURCE VARCHAR2(50 ),
  TYPE VARCHAR2(50 ),
  EVENT_DATE DATE,
  DESCRIPTION VARCHAR2(100 )
)
/

我试过了:

BEGIN  
FOR loop_counter IN 1..1000 
LOOP 
INSERT INTO EVENTS (EVENTID, SOURCE, TYPE, EVENT_DATE, DESCRIPTION) VALUES (loop_counter, loop_counter, 'warning', 
DBMS_RANDOM.VALUE(TO_CHAR(DATE '2000-01-01','J') ,TO_CHAR(DATE '9999-12-31','J')), dbms_random.value(1,100)); 
END LOOP; 
COMMIT; 
END;

我收到此错误异常

  

错误报告 - ORA-06550:第5行第13列:PL / SQL:ORA-00932:   不一致的数据类型:预期DATE得到NUMBER ORA-06550:第4行,   第1列:PL / SQL:忽略SQL语句   06550. 00000 - "行%s,列%s:\ n%s"   *原因:通常是PL / SQL编译错误。   *操作:

你能否告诉我如何解决这个问题?

3 个答案:

答案 0 :(得分:7)

使用:

BEGIN  
FOR loop_counter IN 1..1000 LOOP 
INSERT INTO "EVENTS" (EVENTID, "SOURCE", TYPE, EVENT_DATE, DESCRIPTION) 
VALUES (loop_counter, loop_counter, 'warning', 
        TO_DATE(TRUNC(DBMS_RANDOM.VALUE(TO_CHAR(DATE '2000-01-01','J') ,TO_CHAR(DATE '9999-12-31','J'))),'J')
        ,dbms_random.value(1,100)
       ); 
END LOOP; 
COMMIT; 
END;

SqlFiddleDemo

的变化:

  1. 在最终;
  2. 之后添加mising END
  3. 引用关键字
  4. 重写随机日期生成

答案 1 :(得分:2)

INSERT INTO EVENTS (EVENTID, "SOURCE", TYPE, EVENT_DATE, DESCRIPTION)
SELECT level, level, 'warning', 
        TO_DATE(TRUNC(DBMS_RANDOM.VALUE(TO_CHAR(DATE '2000-01-01','J') ,TO_CHAR(DATE '9999-12-31','J'))),'J')
        ,dbms_random.value(1,100)
  FROM DUAL
CONNECT BY LEVEL <= 1000;

答案 2 :(得分:1)

此外,如果您使用Allroundautomations的PL / SQL Developer,您可以找到答案 这项工作的好工具:数据生成器。 它非常有用,因为它可以帮助生成一些数据 任何类型并将其放在桌子上。

(参见附页截图)enter image description here