该函数生成一定行数的数据

create or replace procedure gen_data(p_tname   in varchar2,
                                     p_records in number) authid current_user as
  l_insert long;
  l_rows   number default 0;
begin

  dbms_application_info.set_client_info('gen_data ' || p_tname);
  l_insert := 'insert /*+ append */ into ' || p_tname || ' select ';

  for x in (select data_type,
                   data_length,
                   nvl(rpad('9', data_precision, '9') /
                       power(10, data_scale),
                       9999999999) 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,1000),';
    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;
    commit;
    dbms_application_info.set_module(l_rows || ' rows of ' || p_records,
                                     '');
    exit when(l_rows >= p_records);
  end loop;
end;
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值