Ver Mensaje Individual
  #4 (permalink)  
Antiguo 25/08/2010, 14:30
juancitoba
 
Fecha de Ingreso: julio-2010
Mensajes: 7
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Poblar o Cargar tabla con datos aleatorios automáticamente

Cita:
Iniciado por matanga Ver Mensaje
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


Hola matanga, te agradezco muchísimo, porque aunque no pude hacerlo funcionar, veo que está cerca. Resulta que lo ejecuto y se crea el procedure, pero luego lo pruebo con la tabla ya creada y me da un error. Es posible que me falte instalar un componente en mi navegador sql? Estoy usando el SQL Nagigator 6.2.1.

Te felicito por el trabajo