Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Poblar o Cargar tabla con datos aleatorios automáticamente

Estas en el tema de Poblar o Cargar tabla con datos aleatorios automáticamente en el foro de Oracle en Foros del Web. Hola, necesito ayuda para hacer funcionar este stored procedure en ORACLE 10g. El objetivo del mismo es poblar una tabla, cuyo nombre se pasa por ...
  #1 (permalink)  
Antiguo 05/08/2010, 13:36
 
Fecha de Ingreso: julio-2010
Mensajes: 7
Antigüedad: 10 años, 10 meses
Puntos: 0
Poblar o Cargar tabla con datos aleatorios automáticamente

Hola, necesito ayuda para hacer funcionar este stored procedure en ORACLE 10g. El objetivo del mismo es poblar una tabla, cuyo nombre se pasa por parámetro. La encontré en la web, pero aparentemente no es compatible con mi BD.

Muchas gracias por anticipado!


create or replace procedure fill_table (p_tname in varchar2, p_records in number)

l_insert long;
l_rows number default 0;
begin

-- Ciclo para llenar la tabla con la información aleatoria.

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
dbms_output.put_line (l_insert);
dbms_output.put_line (to_char (p_records) || '-' || to_char (l_rows));
execute immediate l_insert using p_records - l_rows;
l_rows := l_rows + sql%rowcount;
exit when ( l_rows >= p_records );
end loop;
end;
/
  #2 (permalink)  
Antiguo 06/08/2010, 06:29
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 13 años, 7 meses
Puntos: 85
Respuesta: Poblar o Cargar tabla con datos aleatorios automáticamente

No es que no sea compatible con Oracle 10g, el problema es que no funciona, es decir, no compila por errores de sintaxis, y aunque los corrijas, la lógica del proceso está mal, te recomiendo que programes el proceso desde cero.

Saludos
  #3 (permalink)  
Antiguo 06/08/2010, 18:03
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 13 años, 7 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
  #4 (permalink)  
Antiguo 25/08/2010, 14:30
 
Fecha de Ingreso: julio-2010
Mensajes: 7
Antigüedad: 10 años, 10 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
  #5 (permalink)  
Antiguo 30/08/2010, 13:59
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 13 años, 7 meses
Puntos: 85
Respuesta: Poblar o Cargar tabla con datos aleatorios automáticamente

No hace falta ningún componente adicional para ejecutar esto, sería necesario que indiques el error que estás teniendo, código ORA-XXXX o PLS-XXXX y el texto que acompaña, si no muchas pistas no tengo.

Saludos
  #6 (permalink)  
Antiguo 01/09/2010, 09:40
 
Fecha de Ingreso: julio-2010
Mensajes: 7
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Poblar o Cargar tabla con datos aleatorios automáticamente

Te paso el log de la ejecución...

12:37:52 begin fill_table('T1',100); end;
12:37:53 ORA-00904: : invalid identifier
12:37:53 ORA-06512: at "JPIERDO.FILL_TABLE", line 28
12:37:53 ORA-06512: at line 1
12:37:53 **** SCRIPT ENDED 1-sep-2010 12:37:53 ****
12:37:53 End Script Execution

Saludos!

Etiquetas: tablas, aleatoria
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:09.