简体   繁体   English

在Oracle表中插入随机数据

[英]Insert random data in Oracle table

I wan to create random data in Oracle table: 我想在Oracle表中创建随机数据:

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

I tried this: 我试过这个:

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;

I get this error exception 我收到此错误异常

Error report - ORA-06550: line 5, column 13: PL/SQL: ORA-00932: inconsistent datatypes: expected DATE got NUMBER ORA-06550: line 4, column 1: PL/SQL: SQL Statement ignored 06550. 00000 - "line %s, column %s:\\n%s" *Cause: Usually a PL/SQL compilation error. 错误报告 - 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编译错误。 *Action: *行动:

Can you give me advice how I can fix this issue? 你能告诉我如何解决这个问题吗?

Use: 采用:

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

Changes: 变化:

  1. Add mising ; 添加mising ; after final END 在最后END
  2. Quote keywords 引用关键字
  3. Rewrite random date generation 重写随机日期生成

Also, if you use PL/SQL Developer by Allroundautomations, you can find out good tool for this job: Data Generator. 此外,如果您使用Allroundautomations的PL / SQL Developer,您可以找到适合这项工作的好工具:数据生成器。 It can be very useful, because it can help to generate some data in any types and place it to a tables. 它非常有用,因为它可以帮助生成任何类型的数据并将其放置到表中。

(see screenshot attached) (见附后的截图) 在此输入图像描述

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM