zhyiwww
          用平實的筆,記錄編程路上的點點滴滴………
          posts - 536,comments - 394,trackbacks - 0

          ORACLE 里面怎么實現隨機循環?(網上收集整理)

          你是不是想模擬一些隨機的測試數據
          我提供一個不錯的腳本給你
          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;
          /


          你只要用下面的方法就可以實現你隨機插入 100 條數據了
          SQL> create table test( x varchar2(10) );

          Table created.

          SQL> exec gen_data('TEST', 100)
          insert /*+ append */ into TEST select dbms_random.string('A',10) from
          all_objects where rownum <= :n

          PL/SQL procedure successfully completed.

          SQL> select * from test;

          X
          ----------
          \JlLWWKogS
          IUnoXAtHOR
          ...

          100 rows selected.

          SQL>



          |----------------------------------------------------------------------------------------|
                                     版權聲明  版權所有 @zhyiwww
                      引用請注明來源 http://www.aygfsteel.com/zhyiwww   
          |----------------------------------------------------------------------------------------|
          posted on 2006-05-23 17:54 zhyiwww 閱讀(320) 評論(0)  編輯  收藏 所屬分類: database
          主站蜘蛛池模板: 平泉县| 文化| 科技| 时尚| 宜章县| 七台河市| 突泉县| 永昌县| 鄄城县| 鹿邑县| 册亨县| 阿坝县| 米泉市| 新源县| 林芝县| 青川县| 汉川市| 金山区| 河东区| 太仆寺旗| 师宗县| 松原市| 富源县| 衡阳县| 贡山| 青岛市| 墨脱县| 安阳县| 庆阳市| 行唐县| 庆云县| 渭源县| 探索| 包头市| 临湘市| 阳信县| 丹江口市| 北海市| 京山县| 浦城县| 福州市|