关于oracle序列的问题

关于oracle序列的问题,第1张

就是因为你重启数据库的原因吧,因为你设置了缓冲,cache size是保存在内存中的,重启之后应该就消失了,不会被保存。

嗯,楼上的回答也是原因之一,不过楼上的有一种方法避免,就是在确认会正确commit之后,再取seq的值,不过一般没什么意义,seq只是为了自动生成主键或者是给一个数据编成系统唯一标识用的,没啥意义,不用保持连续

需要先创建序列,然后nextval添加数据使其自动生成序号。

1、创建表:

create table test

(id int,

name varchar2(20));

2、创建序列:

Create sequence seq_test_id

Increment 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怎样在表中引用序列等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10166862.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存