在Oracle表中插入随机数据

6

我想在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: 不一致的数据类型:期望日期但收到数字ORA-06550:第4行, 第1列:PL / SQL:忽略SQL语句 06550. 00000 - "第%s行,第%s列:\n%s" *原因:通常是PL / SQL编译错误。 *操作:

您能否给我建议,如何解决这个问题?


是的,我更新了帖子。 - Peter Penzov
那个 dbms_random() 调用也不会返回日期,因此如果您尝试将像 3684482.0997 这样的数字插入到 DATE 列中,它将失败。 - user330315
1
我该如何更新它? - Peter Penzov
3个回答

16

使用:

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. 在最后一个END之后添加缺失的分号;
  2. 引用关键词
  3. 重写随机日期生成

3
此外,如果您使用Allroundautomations的PL/SQL Developer,您可以找到一个很好的工具来完成这项工作:数据生成器。它非常有用,因为它可以帮助生成各种类型的数据并将其放置在表中。(见附加的截图)enter image description here

3
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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接