我创建了一个表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的冲突。 怎么它能创建时实现在已有数据的表的基础上自增呢?
先谢谢各位大侠了。
先谢谢各位大侠了。
解决方案 »
- oracle 连接
- Oracle中不同用户表导入问题
- 求指点ORA-00904 invalid identifier
- 想搞清楚几个Oracle问题?
- ORACLE,多字段索引跟但字段索引的效率 会一样吗
- 关于java.lang.ClassNotFoundException:oracle.jdbc.driver.OracleDriver的求助!!!!!
- 如何使用pl/sql直接对oracle的表进行操作?
- SQL*Loader问题
- 有没有把一个recordset直接写成文本文件的sql语句?
- ORA-01461 仅可以为插入 LONG 列的 LONG 值赋值 是什么错误啊
- 我创建了一个表,里面要加入分区语句,分区语句我已经查到了,但不知道怎么写入
- 简单连接问题:求助
create sequence book_seq start with N increment by 1 cache 100 cycle;-- 上面的N用下面的结果代替!
select max(id)+1 from book;
select max(id)+1 from book;
下面那个select语句怎么代替N呢,总是报错啊:create sequence book_seq_id start with select max(id)+1 from book increment by 1 nocache nocycle;
ORA-01722: invalid number
然后修改序列的开始值
让序列从9开始插入,前面8条记录不管
另外语句写的有问题
insert into book values(book_seq.nextval,~,~,~)。
select max(id)+1 from book;
start with N -- N用大于等于1的整数值代替,是表示起始值
increment by 1 -- 表示递增值为1,即序列值每取一个,递增1
cache 100 -- 表示每次从序列中cache 100个值打入内存(当业务非常繁忙时,提高性能)
nomaxvalue -- 表示序列没有最大值
nocycle; -- 表示不递增
start with N -- N用大于等于1的整数值代替,是表示起始值
increment by 1 -- 表示递增值为1,即序列值每取一个,递增1
cache 100 -- 表示每次从序列中cache 100个值打入内存(当业务非常繁忙时,提高性能)
nomaxvalue -- 表示序列没有最大值
nocycle; -- 表示不循环!(可设置当序列到达最大值时是否循环,即:再从初始值开始取数)
很感谢。我明白了。 我是担心,创建了这个start with 9的序列后,如果又删除了一些数据,表中剩4条数据了,那么此时如果用book_seq.nextval插入时,那id会是9而不是5啊,怎么可以让它自动判断最后一行,然后自增呢?
-- 那你是不是每次在删除数据的同时,要去修改没有删除数据的ID,使之连续呢?