CREATE SEQUENCE s INCREMENT BY 1 MAXVALUE 99999999 MINVALUE 1 NOCYCLE;create table t(a varchar(8));insert into table t values(substr(to_char(100000000+s.nextval),2,8));

解决方案 »

  1.   

    如果原来的sequence可以直接使用,那就替换掉s,如果原来的不能用,就如上新建一个
      

  2.   

    我的意思没说清楚,意思是要一下子把所有纪录插入进去,那个循环怎么写的。我知道pro c可以写,不过没写过
      

  3.   

    找张记录多于99999999条的表,假设为A, B表假设为目的表insert into B (t) values (select to_char(rownum,'0000000') from A where rownum<10000000);不过建议还是用过程做,每1000条提交一次,这样做的话,如果出错回滚的话,会导致rollback segments涨到很大!
      

  4.   

    而且用程序添的时候,上面说的方法也不行啊,catch到的是“没有足够的值”817的问题?。
      

  5.   

    我刚是说ORARichard(没钱的日子好难过啊) 的方法。
    to:lkliao_hulu()
    我也想用过程啊。可是人家不让啊郁闷
      

  6.   

    建个触发器,每当insert时,用s.nextval的值去自动更新该列
      

  7.   

    SQL> select * from aa;        ID NAME
    ---------- --------
               aa
               bb
               ccSQL> update aa a set a.id=(select b.mynum from (select rownum mynum,rowid myid from aa) b where a.ro
    wid=b.myid);3 rows updated.SQL> select * From aa;        ID NAME
    ---------- --------
             1 aa
             2 bb
             3 cc
      

  8.   

    没有oms的oracle还真难弄啊。。
      

  9.   

    假如转换表只有一个字段insert into 转换表 select rownum from aa;“没有足够的值”
    ========
    这个错误时因为你的table有两个以上的字段有 NOT NULL约束
    但是你插入的字段数目少于有非空约束的字段数。。就会报错如果是在现有的表里更新ID,可以按照我上面的update的方法。。
      

  10.   

    insert into t(a,b,c) select s.nextval a,b,c from 表;
      

  11.   

    insert into t(a,b,c) select substr(to_char(100000000+s.nextval),2,8) a,b,c from 表;
      

  12.   

    to:ATGC(我还以为我会永远守在她身旁。。)
    我的主要问题是格式“00000001”你说的那种方法直接用sequence就很容易了不需要那么多
      

  13.   

    楼主要用pro*C/C++写吗?简单!SEQ_A是一个序列,如果不想用序列就用数组
    limit =99999999 ;
    EXEC SQL FOR :limit insert into t(ID,...) values(TO_CHAR(SEQ_A.NEXTVAL,'00000000'),...)
      

  14.   

    不就是用0补足8位吗
    TO_CHAR(SEQ_A.NEXTVAL,'00000000')就可以了
      

  15.   

    ORARichard(没钱的日子好难过啊) 你的意思我没太明白 是先添一个表用来做数据源再通过语句来改格式吗?
      

  16.   

    SQL> desc aa
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     ID                                                 VARCHAR2(9)
     NAME                                               VARCHAR2(8)SQL> select * from aa;ID        NAME
    --------- --------
              aa
              bb
              ccSQL> update aa a set a.id=(select to_char(b.mynum,'00000000') from (select rownum mynum,rowid myid f
    rom aa) b where a.rowid=b.myid);3 rows updated.SQL> select * from aa;ID        NAME
    --------- --------
     00000001 aa
     00000002 bb
     00000003 cc
      

  17.   

    比如 把001-999这999个数一次性添加到那个表里。
    for(i=1;i<1000;i++)
    {insert xxxx       ///我主要是不知道怎么用insert控制格式
    }
      

  18.   

    to:
     ATGC(我还以为我会永远守在她身旁。。) 
    因为考虑到别的问题 所以我做了个转换的表只有一个字段 所以不可能用你那种方法,不过还是很谢谢你。
      

  19.   

    "所以不可能用你那种方法"
    ========================
    没法理解~那不是一样么?SQL> select * from aa;ID        NAME
    --------- --------
              aa
              bb
              ccSQL> desc convert_table;
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     ID                                                 VARCHAR2(9)SQL> select * from convert_table;no rows selectedSQL> insert into convert_table select to_char(rownum,'00000000') from aa;3 rows created.SQL> select * from convert_table;ID
    ---------
     00000001
     00000002
     00000003SQL> 
      

  20.   

    to:ORARichard 是的
    to:smallcrocodile 如果有oms自然就没有我这一问了,关键是这里没有啊,机器又不让动,所以。。
    to: ATGC 你的方法必须要有个表有足够的数据是吧,现在我要加入的数据很多,不可能先找个那么多记录的表再来调用吧,何况那样的效率不好说。
      

  21.   

    insert into 转换表 select to_char(100000000+s.nextval),2,8) from all_tab_columns,all_tab_columns where rownum<999; -- or where rownum<你要的最大值
      

  22.   

    只能这样,利用系统表,否则ORACLE没办法处理(除非用存储过程,通过循环来处理)。注: ATGC说的也没错。
      

  23.   

    insert into 转换表 select substr(to_char(100000000+s.nextval),2,8) from all_tab_columns,all_tab_columns where rownum<999; -- or where rownum<你要的最大值没注意,前面写错了。少了"substr("。 sorry
      

  24.   

    问题解决了,谢谢大家的帮助!最后还是用了sequence