2011年7月26日火曜日

[测试相关] 创建大表

begin
    execute immediate 'drop table big_table purge';
        exception when others then null;
end;
/

create table big_table as select rownum id, a.* from all_objects a where 1=0;
alter table big_table nologging;

declare
    l_cnt number;
    l_rows number := &1;
begin
    insert /*+ append */ into big_table
        select rownum, a.* from all_objects a;
    l_cnt := sql%rowcount;
    commit;
    while (l_cnt < l_rows)
        loop
            insert /*+ APPEND */ into big_table
                select
                    rownum+l_cnt,
                    OWNER,
                    OBJECT_NAME,
                    SUBOBJECT_NAME,
                    OBJECT_ID,
                    DATA_OBJECT_ID,
                    OBJECT_TYPE,
                    CREATED,
                    LAST_DDL_TIME,
                    TIMESTAMP,
                    STATUS,
                    TEMPORARY,
                    GENERATED,
                    SECONDARY
                from big_table
                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;

0 件のコメント:

コメントを投稿