创建Big_Table:
- 根据ALL_OBJECTS创建一个空表。
- 置Big_Table为NOLOGGING。
- 用ALL_OBJECTS的内容填充表。
- 对Big_Table创建一个主键约束。
- 收集统计结果。
- 显示表中的行数。
脚本Big_Table.SQL如下:
CREATE TABLE Big_Table
AS
SELECT ROWNUM ID,
ao.*
FROM All_Objects ao
WHERE 1 = 0;
ALTER TABLE Big_Table NOLOGGING;
DECLARE
l_Cnt NUMBER;
l_Rows NUMBER := &1;
BEGIN
INSERT /*+ APPEND */
INTO Big_Table
SELECT ROWNUM,
ao.*
FROM All_Objects ao;
l_Cnt := SQL%ROWCOUNT;
COMMIT;
WHILE(l_Cnt < l_Rows)
LOOP
INSERT /*+ APPEND */
INTO Big_Table
SELECT ROWNUM + l_Cnt,
ao.*
FROM All_Objects ao
WHERE ROWNUM <= l_Rows - l_Cnt;
l_Cnt := l_Cnt + SQL%ROWCOUNT;
COMMIT;
END LOOP;
END;
/
ALTER TABLE Big_Table ADD CONSTRAINT Big_Table_PK PRIMARY KEY(ID);
BEGIN
DBMS_STATS.GATHER_TABLE_STATS(OwnName => User,
TabName => 'BIG_TABLE',
Method_Opt => 'for all indexed columns',
CASCADE => TRUE);
END;
/
SELECT COUNT(*)
FROM Big_Table;
eg.创建一个1000000条记录的表:
MUZIYU@MYDB> @D:/SQL/Big_Table.SQL;
表已创建。
表已更改。
输入 1 的值: 1000000
原值 3: l_Rows NUMBER := &1;
新值 3: l_Rows NUMBER := 1000000;
PL/SQL 过程已成功完成。
表已更改。
PL/SQL 过程已成功完成。
COUNT(*)
----------
1000000
软件环境:Windows XP SP3+Oracle 9i R2,[ORACLE_HOME]=C:/Oracle/Ora92