Ver Mensaje Individual
  #3 (permalink)  
Antiguo 06/08/2010, 18:03
Avatar de matanga
matanga
 
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Respuesta: Poblar o Cargar tabla con datos aleatorios automáticamente

Bueno, ahora con un poco más de tiempo le di una mirada al proceso, te dejo el código corregido, aunque solo lo probé con una tabla muy básica, al procedimiento le falta gestionar más tipos de datos.

Código:
create or replace
procedure fill_table (p_tname in varchar2, p_records in number)
as
l_insert varchar2(4000);
l_rows number(8) default 0;
begin

l_insert := 'insert into ' || p_tname || ' select ';

for x in (select data_type, data_length,
rpad ('9', nvl (data_precision, 10), '9') / power (10, nvl (data_scale, 1)) maxval
from user_tab_columns
where table_name = upper(p_tname)
order by column_id) loop

if ( x.data_type in ('NUMBER', 'FLOAT' )) then
l_insert := l_insert || 'dbms_random.value(1,' || x.maxval || '),';
elsif ( x.data_type = 'DATE' ) then
l_insert := l_insert || 'sysdate+dbms_random.value+dbms_random.value(1,100 0),';
else
l_insert := l_insert || 'dbms_random.string(''A'',' || x.data_length || '),';
end if;
end loop;

l_insert := rtrim(l_insert,',') || ' from all_objects where rownum <= :n';

loop

execute immediate l_insert using p_records - l_rows;
l_rows := l_rows + sql%rowcount;
exit when ( l_rows >= p_records );
end loop;

commit;

end;
Y para probarlo
Código:
create table t1 (id number(8), data varchar2(30));
begin
fill_table('T1',100);
end;
/
select count(*) from t1;
Saludos