
就是因为你重启数据库的原因吧,因为你设置了缓冲,cache size是保存在内存中的,重启之后应该就消失了,不会被保存。
嗯,楼上的回答也是原因之一,不过楼上的有一种方法避免,就是在确认会正确commit之后,再取seq的值,不过一般没什么意义,seq只是为了自动生成主键或者是给一个数据编成系统唯一标识用的,没啥意义,不用保持连续
需要先创建序列,然后nextval添加数据使其自动生成序号。
1、创建表:
create table test(id int,
name varchar2(20));
2、创建序列:
Create sequence seq_test_idIncrement by 1
Start with 1
Maxvalue 999999
Minvalue 1
Nocycle
nocache;
3、插入数据:
insert into test values (seq_test_idnextval,'badkano');4、再插入一条数据:
insert into test values (seq_test_idnextval,'百度知道团长');这样可见,序号是添加成功的。
在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
1、Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环CACHE 10;一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回 sequence的当前值
NEXTVAL=增加sequence的值,然后返回 sequence 值比如:emp_sequenceCURRVAL
emp_sequenceNEXTVAL
可以使用sequence的地方:
- 不包含子查询、snapshot、VIEW的 SELECT 语句
- INSERT语句的子查询中
- NSERT语句的VALUES中
- UPDATE 的 SET中
可以看如下例子:
INSERT INTO emp VALUES
(empseqnextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);
SELECT empseqcurrval FROM DUAL;
但是要注意的是:
- 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失 所以可以在create sequence的时候用nocache防止这种情况。
2、Alter Sequence
你或者是该sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence 可以alter除start至以外的所有sequence参数如果想要改变start值,必须 drop sequence 再 re-create
Alter sequence 的例子
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
CYCLE -- 到10000后从头开始NOCACHE ;
以上就是关于关于oracle序列的问题全部的内容,包括:关于oracle序列的问题、oracle 数据库 数据表自动生成序号 怎么添加、oracle怎样在表中引用序列等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)