我想主键自增长或随机生成,这样批量创建数据的存储过程。

解决方案 »

  1.   

    请讲清楚需求
    --以下语句仅供参考
    create table big_tab as
    select object_id
    from dba_objects
    where rownum<10001;
      

  2.   

    利用oracle自带的guid函数可以实现
      

  3.   

    利用oracle自带的guid函数可以实现 
    怎么用呀?越简单越好。
      

  4.   

    用存储过程实现向下表中 插入数据,其中id 是主键。INSERT INTO  WATAB (id
                      ,NAME
                      ,YEAR
                      ,MEMO
                      VALUE(
                       object_id,
                       'XZW',
                       'XZW',
                       'XZW'
                      )
      

  5.   

    -- 一下给你生成5W多条:如下SQL> select count(*) from dba_objects;  COUNT(*)
    ----------
         51870SQL> create sequence SEQ_9;Sequence createdSQL> create table test9 as select seq_1.nextval id,t.* from dba_objects t;Table createdSQL> select count(*) from test9;  COUNT(*)
    ----------
         51873SQL> desc test9;
    Name           Type          Nullable Default Comments 
    -------------- ------------- -------- ------- -------- 
    ID             NUMBER        Y                         
    OWNER          VARCHAR2(30)  Y                         
    OBJECT_NAME    VARCHAR2(128) Y                         
    SUBOBJECT_NAME VARCHAR2(30)  Y                         
    OBJECT_ID      NUMBER        Y                         
    DATA_OBJECT_ID NUMBER        Y                         
    OBJECT_TYPE    VARCHAR2(19)  Y                         
    CREATED        DATE          Y                         
    LAST_DDL_TIME  DATE          Y                         
    TIMESTAMP      VARCHAR2(19)  Y                         
    STATUS         VARCHAR2(7)   Y                         
    TEMPORARY      VARCHAR2(1)   Y                         
    GENERATED      VARCHAR2(1)   Y                         
    SECONDARY      VARCHAR2(1)   Y                         SQL> 
      

  6.   

    这样来:
    insert into watab(id,name,year,memo)
    select rownum,'xzw','xzw',xzw'
    from dual
    connect by rownum<=10000;
      

  7.   


    可能我确实没让大家明白我的需求:
    1、通过存储过程,或SQL 实现
    2、向指定表(含主键)插入数据。
      

  8.   

     SQL codeinsert into watab(id,name,year,memo)
    select rownum,'xzw','xzw','xzw'
    from dual
    connect by rownum<=10000;
    这个好.
      

  9.   

    不会吧?我写的那个insert不就插入了你的那个例子吗?
      

  10.   

    呵呵,这20分是我的啦!!看我收藏的tom写的!
    --此过程从asktom摘录而来
    --用途:用于为表生成随机数据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;
      

  11.   

    只要执行 begin gen_data('表名', '行数'); end;唯一的问题就是表中不能有如一些check 约束之类的东东
    另外生成test数据,可以用pl/sql developer提供的功能