dez 122014
 

Se tem algo que é fundamental é termos uma base de desenvolvmento no nosso computador pessoal.

Seja para testar uma feature, uma prova de conceito ou aprender algo novo, ter uma base pessoal é muito útil.

E vez por outra em nossos testes precisamos de uma tabela gigante.

Mas como gerar uma tabela dessas ?

Você pode verificar abaixo alguns scripts para lhe ajudar:

1 – Uma tabela (all_objects) com 1 milhão de linhas

O código pertence a Tom Kyte (http://asktom.oracle.com)

-- Create Table with same structure as ALL_TABLES from Oracle Dictionary
create table bigtab
as
select rownum id, a.*
from all_objects a
where 1=0;
alter table bigtab nologging;

-- Fill 1'000'000 Rows into the Table
declare
l_cnt number;
l_rows number := 1000000;
begin
-- Copy ALL_OBJECTS
insert /*+ append */
into bigtab
select rownum, a.*
from all_objects a;
l_cnt := sql%rowcount;
commit;

-- Generate Rows
while (l_cnt < l_rows)
loop
insert /*+ APPEND */ into bigtab
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 bigtab
where rownum <= l_rows-l_cnt;
l_cnt := l_cnt + sql%rowcount;
commit;
end loop;
end;
/

alter table bigtab add constraint
bigtab_pk primary key(id);

2 - Uma tabela com dados randômicos

O código pertence a Akadia (http://www.akadia.com)

    
CREATE TABLE bigtab (
id NUMBER,
weight NUMBER,
adate DATE
);

INSERT INTO bigtab (id, weight, adate)
SELECT MOD(ROWNUM,1000),
DBMS_RANDOM.RANDOM,
SYSDATE-1000+DBMS_RANDOM.VALUE(0,1000)
FROM all_objects
/
51502 rows created.

3 - Uma tabela para testes com Range Partitioning

O código pertence a Akadia (http://www.akadia.com)

The ID of the table can be used for Range Partitioning

create table bigtab (
id number(12,6),
v1 varchar2(10),
padding varchar2(50)
)
nologging -- just to save a bit of time
/

insert /*+ append ordered full(s1) use_nl(s2) */
into bigtab
select
3000 + trunc((rownum-1)/500,6),
to_char(rownum),
rpad('x',50,'x')
from
all_objects s1, -- you’ll need the privilege
all_objects s2
where
rownum <= 1000000 / commit;
 

4 - Uma tabela particionada para testes com data

O código pertence a Oracle-Base (http://www.oracle-base.com)

CREATE TABLE bigtab (
 id NUMBER(10),
 created_date DATE,
 lookup_id NUMBER(10),
 data VARCHAR2(50)
);

DECLARE
 l_lookup_id NUMBER(10);
 l_create_date DATE;
BEGIN
 FOR i IN 1 .. 1000000 LOOP
 IF MOD(i, 3) = 0 THEN
 l_create_date := ADD_MONTHS(SYSDATE, -24);
 l_lookup_id := 2;
 ELSIF MOD(i, 2) = 0 THEN
 l_create_date := ADD_MONTHS(SYSDATE, -12);
 l_lookup_id := 1;
 ELSE
 l_create_date := SYSDATE;
 l_lookup_id := 3;
 END IF;

 INSERT INTO bigtab (id, created_date, lookup_id, data)
 VALUES (i, l_create_date, l_lookup_id, 'This is some data for ' || i);
 END LOOP;
 COMMIT;
END;
/

Espero que tenham gostado !

  One Response to “Criando uma tabela para testes no Oracle – bigtable”

  1. […] isso podemos usar os script fornecidos no post “Criando uma tabela para testes no Oracle – bigtable”. Eu usei o script com uma pequena […]

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)