我创建了一个表BOOK,主键是ID,已经插入了8条数据,然后才想起来创建自增序列book_seq(以id自增).   我是这样创建的: create sequence book_seq increment by 1。   再insert:insert into book values(book_seq.netval,~,~,~)。   报错:book_seq.nextval是2啊,和已有主键ID为2的冲突。   怎么它能创建时实现在已有数据的表的基础上自增呢?   
   先谢谢各位大侠了。

解决方案 »

  1.   


    create sequence book_seq start with N increment by 1 cache 100 cycle;-- 上面的N用下面的结果代替!
    select max(id)+1 from book;
      

  2.   

    create sequence book_seq start with N increment by 1 cache 100 nocycle;-- 上面的N用下面的结果代替!
    select max(id)+1 from book;
      

  3.   


    下面那个select语句怎么代替N呢,总是报错啊:create sequence book_seq_id start with select max(id)+1 from book increment by 1 nocache nocycle;
     
    ORA-01722: invalid number
      

  4.   

     select max(id)+1 from book 取到这个最大值,
    然后修改序列的开始值
      

  5.   

    create sequence book_seq start with 8 increment by 1 ;
    让序列从9开始插入,前面8条记录不管
    另外语句写的有问题
    insert into book values(book_seq.nextval,~,~,~)。
      

  6.   

    create sequence book_seq start with N increment by 1 cache 100 nocycle;-- 上面的N用下面查询的结果代替!
    select max(id)+1 from book;
      

  7.   

    create sequence book_seq -- book_seq是序列名称
    start with N                          -- N用大于等于1的整数值代替,是表示起始值
    increment by 1                    -- 表示递增值为1,即序列值每取一个,递增1
    cache 100                            -- 表示每次从序列中cache 100个值打入内存(当业务非常繁忙时,提高性能)
    nomaxvalue                         -- 表示序列没有最大值
    nocycle;                                -- 表示不递增
      

  8.   

    create sequence book_seq -- book_seq是序列名称
    start with N                          -- N用大于等于1的整数值代替,是表示起始值
    increment by 1                    -- 表示递增值为1,即序列值每取一个,递增1
    cache 100                            -- 表示每次从序列中cache 100个值打入内存(当业务非常繁忙时,提高性能)
    nomaxvalue                         -- 表示序列没有最大值
    nocycle;                                -- 表示不循环!(可设置当序列到达最大值时是否循环,即:再从初始值开始取数)
      

  9.   


    很感谢。我明白了。 我是担心,创建了这个start with 9的序列后,如果又删除了一些数据,表中剩4条数据了,那么此时如果用book_seq.nextval插入时,那id会是9而不是5啊,怎么可以让它自动判断最后一行,然后自增呢?
      

  10.   

    -- 既然你想的很多:表中剩哪4条数据呢?ID分别是什么呢?
    -- 那你是不是每次在删除数据的同时,要去修改没有删除数据的ID,使之连续呢?