Oracle - 使用随机数据插入x行数

时间:2016-04-27 18:41:56

标签: oracle oracle11g

我目前正在进行一些测试,需要大量数据(大约100万行)

我使用下表:

CREATE TABLE OrderTable(
OrderID INTEGER NOT NULL,
StaffID INTEGER,
TotalOrderValue DECIMAL (8,2)
CustomerID INTEGER);

ALTER TABLE OrderTable ADD CONSTRAINT OrderID_PK PRIMARY KEY (OrderID) 

CREATE SEQUENCE seq_OrderTable
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10000;

并希望使用以下规则随机插入1000000行:

  1. OrderID需要是顺序的(1,2,3等......)
  2. StaffID需要是1到1000之间的随机数
  3. CustomerID需要是1到10000之间的随机数
  4. TotalOrderValue需要是介于0.00和9999.99
  5. 之间的随机十进制值

    这甚至可以吗?我可以使用此更新语句生成所有这些吗?但是在1中产生一百万行我不知道如何做到这一点

    感谢您对此事的任何帮助

    这是我在更新时随机生成数字的方式:

    UPDATE StaffTable SET DepartmentID = DBMS_RANDOM.value(low => 1, high => 5);
    

1 个答案:

答案 0 :(得分:3)

出于测试目的,我创建了表格,并使用此查询一次性填充:

CREATE TABLE OrderTable(OrderID, StaffID, CustomerID, TotalOrderValue)
as (select level, ceil(dbms_random.value(0, 1000)), 
                  ceil(dbms_random.value(0,10000)), 
                  round(dbms_random.value(0,10000),2) 
    from dual 
    connect by level <= 1000000)
/

一些注意事项 - 最好使用NUMBER作为数据类型,NUMBER(8,2)是十进制格式。填充此类表以使用“不使用PRIOR的分层查询”技巧(“按级别连接&lt; = ...”技巧)来获取订单ID会更有效。

如果您的表已经创建,insert into OrderTable (select level...)(与我的代码中相同的子查询)也可以正常工作。你可能最好只在创建数据后添加PK约束,以免减慢速度。

创建的表中的一小部分样本(在便宜的笔记本电脑上创建表的总时间 - 1,000,000行 - 为7.6秒):

SQL> select * from OrderTable where orderid between 500020 and 500030;

   ORDERID    STAFFID CUSTOMERID TOTALORDERVALUE
---------- ---------- ---------- ---------------
    500020        666        879         6068.63
    500021        189       6444         1323.82
    500022        533       2609         1847.21
    500023        409        895          207.88
    500024         80       2125         1314.13
    500025        247       3772         5081.62
    500026        922       9523         1160.38
    500027        818       5197         5009.02
    500028        393       6870         5067.81
    500029        358       4063          858.44
    500030        316       8134         3479.47