【发布时间】:2013-06-25 08:01:40
【问题描述】:
我有这张桌子:
CREATE TABLE TBIGP
(
IDPER NUMBER(6),
DESCRIZIONE VARCHAR2(50),
DINS DATE
)
PARTITION BY LIST (IDPER)
(
PARTITION P201201 VALUES(201201),
PARTITION P201202 VALUES(201202),
PARTITION P201203 VALUES(201203),
PARTITION P201204 VALUES(201204),
PARTITION P201205 VALUES(201205),
PARTITION P201206 VALUES(201206),
PARTITION P201207 VALUES(201207),
PARTITION P201208 VALUES(201208),
PARTITION P201209 VALUES(201209),
PARTITION P201210 VALUES(201210),
PARTITION P201211 VALUES(201211),
PARTITION P201212 VALUES(201212),
PARTITION P201301 VALUES(201301),
PARTITION P201302 VALUES(201302),
PARTITION P201303 VALUES(201303),
PARTITION P201304 VALUES(201304),
PARTITION P201305 VALUES(201305),
PARTITION P201306 VALUES(201306),
PARTITION P201307 VALUES(201307),
PARTITION P201308 VALUES(201308),
PARTITION P201309 VALUES(201309),
PARTITION P201310 VALUES(201310),
PARTITION P201311 VALUES(201311),
PARTITION P201312 VALUES(201312),
PARTITION OTHER VALUES(DEFAULT)
);
现在我想以这种方式填充表格。使用诸如 for、while 或 loop 之类的迭代过程,我希望每个分区由 500000 条记录组成。为了精确,每个分区有 1 到 450000-500000 条记录,其中记录的数量是随机的(一个分区可以有 480000 条记录,另一个分区有 490000 或 450000 或 467890 条记录......)。
每生成 1000 条记录,我想做一次 commit。
我不知道是否清楚。我很难用英语解释。谢谢。
编辑
类似这样的:
BEGIN
FOR i IN 1..24
LOOP
j:=1
z:=dbms_random.value(450000,500000)
WHILE j<=z
INSERT INTO T_BIG_P_1
VALUES (i, 'description', TRUNC(SYSDATE + DBMS_RANDOM.value(0,366))
IF MOD (j, 1000) = 0 THEN
COMMIT;
END IF;
j:=j+1;
END LOOP;
END;
exec DBMS_STATS.GATHER_TABLE_STATS('SH','T_BIG_P_1');
【问题讨论】:
-
"populate" - 你的数据来自哪里?另一个表,一个文件,一个过程?
-
Oracle 版本 11。我必须使用过程手动填充表。创建后,我想做一个带有循环的 plsql 过程来填充表。
-
这似乎是对 PARTITION 机制的一种不寻常的使用——您确定要在名为 IDPER 的列中使用值为 201312 的 480000 行吗?
-
@GregHNZ 是的,仅用于锻炼。
标签: oracle loops plsql populate