解决方案 »

  1.   


    create or replace procedure proc_random is
          v_FilePath varchar2(200);--录制文件路径,随机6个字母
          v_PartId varchar2(200);--区分字段 格式MMDD,随机4个数字
          v_StaffNo varchar2(200);--业务代表号,从YTCZ060001-YTCZ060020随机生成
          v_RecordTime date;--录制时间,从20170804前6个月随机生成
          x number :=0;--循环
    begin 
      --循环执行500次
      while x<=50000 loop  
      x :=x+1;
      --生成6个字母
      select dbms_random.string('U', 6) into v_FilePath  from dual;
      --生成4个数字
      select round(dbms_random.value(1000,9999)) into v_PartId  from dual;
      --生成业务编号
      select 'YTCZ0600'||to_char(round(dbms_random.value(1,20)),'fm00') into v_StaffNo from dual;
      --生成时间
      select to_date(trunc(dbms_random.value(to_number(to_char(to_date('20170801','yyyymmdd'),'J')),
                                           to_number(to_char(to_date('20170201','yyyymmdd') + 1,'J')))),
                   'J') into v_RecordTime/*+
           (trunc(dbms_random.value(9, 17)) * 3600 +
            trunc(dbms_random.value(0, 60)) * 60 +
            trunc(dbms_random.value(0, 60))) / (24 * 60 * 60)*/
      from dual;
      
      -- 向t_lzinfor表插入数据
      insert into t_lzinfor(seriaino,filepath,partid,staffno,recordtime)
      values(t_lzinfor_seq.nextval,v_FilePath,v_PartId,v_StaffNo,v_RecordTime);
      commit;
      end loop;
      end proc_random;
      

  2.   

    如下SQL是随机生成1000记录,其它的都简单了,自己写吧。
    select  rownum serialno,--自动增长序列
            dbms_random.string('$', 6) filepath,--随机取6个字赠
            trunc(dbms_random.value(4, 9999)) partid,--随机取4个数字
            'YTCZ0'||trunc(dbms_random.value(60001,60020)) staffno,--从YTCZ060001...YTCZ060020中随机抽取
            to_date(trunc(
            dbms_random.value(
            to_char(add_months(to_date('20060804','YYYYMMDD'),-6),'J'),
            to_char(add_months(to_date('20060804','YYYYMMDD'),-6),'J')+
            (to_date('20060804','YYYYMMDD')-add_months(to_date('20060804','YYYYMMDD'),-6))
            )
            ),'J') --从2006年8月4日前的6个月内,随机抽取
       from dual
     connect by level <= 1000;
      

  3.   

    优化一下随机抽取时间的语句 
    select  rownum serialno,--自动增长序列
            dbms_random.string('$', 6) filepath,--随机取6个字赠
            trunc(dbms_random.value(4, 9999)) partid,--随机取4个数字
            'YTCZ0'||trunc(dbms_random.value(60001,60020)) staffno,--从YTCZ060001...YTCZ060020中随机抽取
            to_date('20060804','YYYYMMDD')-
            trunc(dbms_random.value(0,
            to_date('20060804','YYYYMMDD')-
            add_months(to_date('20060804','YYYYMMDD'),-6))
            ) --从2006年8月4日前的6个月内,随机抽取
       from dual
     connect by level <= 1000;