我目前正在进行一些测试,需要大量数据(大约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中产生一百万行我不知道如何做到这一点
感谢您对此事的任何帮助
这是我在更新时随机生成数字的方式:
UPDATE StaffTable SET DepartmentID = DBMS_RANDOM.value(low => 1, high => 5);
答案 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