2016-04-27 22 views
3

行插入X量的一些测试,我在需要进行大量的数据(约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; 

并想随机插入百万行到它与下面的规则:

  1. 订单ID必须是连续的(1,2,3等...)
  2. STAFFID是需要一个随机数1和1000之间
  3. 客户ID必须是一个随机数1和10000之间
  4. TotalOrderValue需要一个随机十进制值0.00和9999.99之间

这甚至可能做什么?我可以使用此更新语句生成所有这些内容吗?然而,在1分去产生一百万行,我不知道如何做到这一点

感谢所有帮助在这个问题上

这是我怎么会随机生成的更新数量:

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

回答

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(8,2)是格式为小数。使用“没有PRIOR的分层查询”技巧(“通过层次连接< = ...”技巧)来获取订单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 
+0

完美:)谢谢你,我会用方法替换此我刚刚发现哪一个不太容易理解,并且感谢您提供格式化的提示 – Crezzer7