Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/07/2010, 15:51
juancitoba
 
Fecha de Ingreso: julio-2010
Mensajes: 7
Antigüedad: 14 años, 4 meses
Puntos: 0
Pregunta Stored procedure con error en SQL Server

Hola, necesito ayuda para hacer funcionar este stored procedure en SQL server. 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, p_clone in boolean)
----------------------------------------------------------------------------------------------------------------------------------
-- Nombre: flll_table
-- Modificó: Orlando Olguín Olvera
-- Descripción: Llena la tabla p_tname en todos sus campos, con p_records registros de datos aleatorios. Si p_clone es
-- true, entonces se crea una copia de la tabla p_tname, y en ella se insertan los p_records registros.
----------------------------------------------------------------------------------------------------------------------------------
l_insert long;
l_rows number default 0;
begin

-- Ciclo para llenar la tabla clonada o no 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;
/