oracle关于序列的nextval取值

创建序列
create sequence a
increament by 1
start with 1
maxvalue 100
nocycle
cache 10;
如果往空表中直接插入数据,取a.nextval为id的话,查询结果id会从2开始!如果不是从空表插入数据就会从1开始!这是什么原因??请指教图片说明
例如:
create table stu(
id number,
name varchar2(10)
);
直接往里面插入数据:insert into stu values(a.nextval,'link');
id会从2开始(注意这是从空表中插入了数据)
图片说明
要是原来的表中插入了一条数据,id则从1开始的。(在这之前,我把表和序列都重建了)
insert into stu values(12,'d');
insert into stu values(a.nextval,'link');
图片说明

3个回答

nextval这个函数是序列里去下一个值的,你设置的从1开始,如果你用了nextval,生成的就是下一个产生的值,如果你设置值的间距是1的话,你用完就产生的是2,如果不用就产生当前的值,就是1

linklin1995
_linklin 你没有看懂我的意思!我设置的是从1开始的,增量也为1!当给一个表插入数据时(ID从序列中取),如果是空表会从id从2开始,有数据的表在插入数据是从ID是从1开始的
3 年多之前 回复

当sequence的cache为0时,每次sequence.nextval得到的值是当前sequence的值加1。
但cache不为0时,比如为20,他就意味着每次在缓存中去20次再写入数据库去,这样的的用sequence.nextval得到的值就比较难确定,但能保证每次去的值不一样,是递增的。

linklin1995
_linklin 首先cache不能为0,然后设置nocache时也是同样的结果!
3 年多之前 回复

我理解你在第二种情况下,如果直接用CURRVAL去做insert,应该是会报错的。因为nextval还没有出来,如果是这样,是符合预期的。

在你第一种情况下,你也可以直接用CURRVAL去做insert,看看是不是会报错,如果不报错,则代表CURRVAL当前是有值的,则再去查看原因。

linklin1995
_linklin 感谢你的回复!不管是第一种和第二种情况,序列如果没有首先使用nextval的话,都是不能直接取currval的值的
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
oracle序列的两个参数:nextval和currval简介
oracle序列的两个参数:nextval和currval 我将通过下面的一个实例来体现两个参数的区别 创建个序列: 注:在调用currval的值前,必须先调用nextval的值,否则会报错,如下图中所示: 从上图中我们可以看到,在多次调用时nextval的值会继续增加 在上图中我们可以看到currval的值在会话中多次调用时,还是和自身会话的当前值一样
Oracle序列nextval以及currval的区别
先说一下序列怎么调用 比如创建了序列table_sequence,插入数据时  insert table 表名 列名1,列名2,...... values(table_sequence.nextval,值1,值2,......); insert table 表名 列名1,列名2,...... values(table_sequence.currval,值1,值2,......); 在说下
oracle Nextval的用法
是oracle Nextval的用法,最基本的用法,拔高的不实用
KMP算法的Next及NextVal序列求解
今天遇到一个KMP算法的题,以前根本没见过,上网查了好多关于KMP,但是讲的都不是很清楚,看的一头雾水,然后就自己研究做出了一个小程序,附上了相关算法解释!希望这个小程序可以帮助大家很好的了解KMP算法Next及NextVal序列的求解算法!
oracle 的nextval函数
[size=16px]我的数据库里有一张表(article),格式如下rnid int rnstartId intrnrn其中id设置了sequence为自增字段,我在通过jdbc插入的时候采用如下语句:[/size]rnrn[code=sql][size=16px]insert into article values(sequence.nextval,startId)[/size][/code]rnrn[size=16px]我想请问,如何批量插入?[/size]
Oracle关于nextval()的小白问题请教
正常情况下nextval()出来的票据号是不会出现重复的,假如nextval()获取数据后再+1 会出现重复值吗
oracle中,在不用nextval的情况下,如何得到序列当前值?
这个方法:rnselect last_number from user_sequence where sequence_name='SEQ_NAME';rn貌似不行啊!rnrn但是,先执行select your_seq_name.nextval from dual;再执行select your_seq_name.currval from dual;这种方法我知rn道,可执行之后得到的就不是我想要的当前值了。除此之后没有别的方法了吗?
先从oracle的序列查出nextval值然后再插入行不行?
根据功能的需求,我需要在插入这条数据之前获取到他的id值,进行一些操作。rnid是查出来了,但是我插不进去数据库了。 id只要不和我刚查出来的id一样就可以插入,一样就插不进去。 为什么?rn有什么解决方案吗?? 救命。。
关于ORACLE的取值问题?
rnrnrn ORACLE9数据库有个 CONTENT字段 CLOB型 rnrnrn 在数据库中能显示字符,如"大一",但我用JSP的get.Clob("content")却显示出"oracle.sql.CLOB@13f903b"rn rnrn 请问这是怎么回事,有什么方法可以解决?rn rn
oracle 不一样的获取nextval 方式
create or replace function get_seq_next (seq_name in varchar2) return number is   seq_val number ; begin   execute immediate 'select '|| seq_name|| '.nextval from dual' into seq_val ;   return se
跳过nextval查询当前序列值
原文地址——http://blog.csdn.net/qq525099302/article/details/47280211 user_sequences中保存着当前用户的所有序列信息,可以从这张系统内置表中查询当前序列值select seq.last_number from user_sequences seq where seq.sequence_name='SEQ_B_ORDER_ID';
关于sequence得currval和nextval
我的问题是这样的:rn假设有两个用户A、B同时访问同一个sequence,并且A和B都开启了事务,rn当A对一个数据库表进行插入操作,访问了nextval,但是并没有commit,rn此时B也进行了同样的操作,也没有提交。rn然后A又执行一条sql语句,插入另一个表,此时用到了currval,提交。rnB也同样。rn我想知道A插入的两个表中的sequence的值是否是一致的?rn还是A插入第二个表中的sequence的值与B所得到的sequence相同?rn
关于索引号的nextval的问题
在一次事务处理中,没有提交之前,如何得到新插入的nextval值rn比如说有个test表,有两个域:test_index(NUM), test_val(NUM)rn写下INSERT INTO test(test_index, test_val) values(test_index.nextval, 1)rn之后,如何得到该插入语句所得的test_index值,注意这是事务并未提交。rn谢谢
请教一个关于Oracle序列取值的问题,请大侠指教
请教一个关于Oracle序列取值的问题,请大侠指教rnrn现在在开发一个程序,后台用的oracle 10g 数据库,其中有个主表,主键是根据记录数逐条递增的字符串,字符串最后5位是用oracle 序列算出的号。rn现在业务上需要每天从0点开始,主键的最后5位数从1开始计数,然后到下一天0点开始,该数自动再重1开始计数。rn之前我做了个序列用来逐次递增取值,又因为要从每天0点从1开始重新计数,我又写了个job,让JOB在每天0点0分1秒,重建序列,这样的话序列就重新重1开始取值,可是运行了一阵之后,发现JOB每次运行的时间出现了延时,最新一次 是0点1分14秒执行的,这样的话从0点到0点1分14秒之间,我的主键最后5位取的还是重建前计数器的值,可是当0点1分14秒之后,重建了序列后,序列从1开始重新取值,这样就出现了一个严重的问题,0点1分14秒之后,从序列取出的值又可能和 0点到0点1分14秒这段时间取的序列值重复,这就造成了主键重复,请问各位有类似的方案吗,从哪着手解决这个问题?
关于oracle序列的问题
我创建了一个序列,比如seq_no,我初始值设置的是1,增量是1,缓冲是2。rn我希望的是这个序列能一直从1往上增加,1、2、3、4等等。但是我发现有的时候会出现中间的序列号断开的情况,比如1完了之后,下次就到3了,2没有。我在产生1之后,重新启动过数据库,不知道是否和这个有关呢?虽然少一两个序列值影响不大,但是还是希望有什么办法能够让序列值自动连续下来,不丢失最好。rn请问大家有什么好的办法吗?谢谢了先~rn
Oracle关于序列的问题。
想请问一下,我用SYSTEM用户创建了一张表和一组序列,然后插入10组数据,序列号是从01开始的。rn接下来我尝试用自己创建的帐号,建立了一张一样的表和序列,同样插入一组数据,但是序列是从02开始的。rn有人能帮我解答一下这是为什么吗? rn
关于oracle中的序列
oracle中没有自动增长的字段,一般都用序列来实现,问一下各位高手:如果不考虑与其它数据库的集成,设计数据库时,大家觉得用序列来生成自动增长的ID是否合理?rowid可以代替么?rnrn是否有必要一定要用到这种唯一的标识符呢?
关于Oracle 序列
这个根本就不懂....
nextval求法
数据结构nextval求法,没什么用的,单纯为了积分
关于oracle建立序列问题?
09:11:37 SQL> CREATE TABLE students (rn09:11:39 2 id NUMBER(5) PRIMARY KEY,rn09:11:39 3 name VARCHAR2(20)rn09:11:39 4 );rnrn表已创建。rnrn实际:3034rn09:11:42 SQL> create sequence s_id increment by 1 start with 1 maxvalue 99999rnrn比如上面建立的序列,create sequence s_id s_id这的命名是随便取还是有特殊的要求?好象随便取都可以?rn这样不就出个问题,如果我有几个表,我建立的这序列到底会为那个表建立序列呢?rnrn麻烦指点,,刚学oracle!
一个关于Oracle序列的问题?
For Example:rnrn建立一张用户表,同时也建立一个与之对应的序列,主要是用来获取用户id,rnrn现在在数据库初始化的时候我需要先初始化一些用户信息进去。rnrninsert into t_user(userid,...) values(1, ...)rn/rninsert into t_user(userid,...) values(2, ...)rn/rninsert into t_user(userid,...) values(3, ...)rn/rn...rncommitrn/rnrn而我的序列是从1开始rncreate sequence seq_userrnincrement by 1rnstart with 1rn...rn/rnrn疑问是,在我初始化用户信息的时候,是不是就应该用 seq_user.nexval() 的值代替1,2,3 ...rnrn如果不代替的话,那么我的序列是从1开始的,这样如果我在后台创建一个用户肯定会出问题的,主键重复啊!(主键为1的用户已经存在了)rnrn请教各位有数据库设计经验的大侠:这种情况你们都是如何处理的。rn1.是直接用序列的值初始化数据?rn2.还是序列的值不以1开始,而是看初始化了多少数据,以N+1开始?
请问关于oracle的序列问题?
我创建了一个序列后,用seq.NEXTVAL的插入一个值后,由于里面有一个BLOB类型,所以必需先插入一个BLOB.empty_lob(),然后我想用seq.CURRVAL来作查询,可序列值不能用于条件语句.rnrn请问高手们如何解决?rnrn// 插入记录rnINSERT INTO table_names(id, body) VALUES(seq.NEXTVAL,BLOB.empty_lob())rnrn// 如何根据自动生成的id值来锁定BLOBrn??????
###请教关于ORACLE序列的问题
在数据库定义了序列SQ_IDrnSQL语句总是报错:rncmd.CommandText="insert into table_item (itemid)values(SQ_ID.Nextval) ";rn序列是不是需要引用?rn看到帖子说需要建立触发器,可是这个序列在其他代码可以用。rn谢谢!
关于oracle序列用法的一位
现在有两个sequencernseq_1_23是一个从1到23的循环序列,SEQ_VID是一个从1开始无限增长的序列,现在要实现的功能是rn当seq_1_12的currval达到23的时候,才调用seq_vid的nextval,在select写了一个case when,问题是这个case when的判断rn没有作用哇,不管什么情况,seq_vid都条用了nextvalrnrnSELECT seq_1_23.nextval group1,rn casern when seq_1_23.currval = 23 thenrn SEQ_VID.Nextvalrn elsern seq_vid.currvalrn end group2rnfrom ....rnrn还请明白人解答哇
关于使用oracle的序列问题
用Statement对象,在sql语句中是可以直接使用序列rn但我现在想使用PreparedStatement,prstmt.setInt(1,seq_dept);这样不行,该如何办?rn
初级问题:关于 nextval 和 order by
我想知道,为什么这两个东西不能共存。望大虾,给我指点一二!!rn
Oracle序列
Oracle序列
Oracle 之 序列
什么是序列? 序列: 可供多个用户用来产生唯一数值的数据库对象 •自动提供唯一的数值 •共享对象 •主要用于提供主键值 •将序列值装入内存可以提高访问效率   CREATE SEQUENCE 语句 CREATE SEQUENCE sequence [INCREMENT BY n] --每次增长的数值 [START WITH n] --从哪个值开...
oracle序列
–可以使用create sequence语句创建序列 –sequence_name:序列的名称 –start_num:序列开始的第一个整数,默认从1开始 –increment_num:每次增长的数值 –maximum_num:序列能够增长到的最大值 –NOMAXVALUE:对于序列最大值,不指定最大值,对于升序最大值是1027,对于降序是-1 –minimum_num:序列中的最小值,该
Oracle之序列
本教程从基础的MySQL开始介绍,到SQLServer,然后Oracle,让学员能够从易到难,从Java或PHP语言到.Net数据库的灵活使用。其中分库介绍了,各个数据库的基本独立使用,以及各自的安装和配置。课程中主要是以SQL脚本为基础同时介绍非常实用性的脚本使用。例如:层次化查询,正则表达式以及技巧性函数等等。
Oracle序列??/
一简单问题,我想读出Oracle的序列值 怎么读rnrn就是想把当前序列 赋给一个变量 然后显示出来》》
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法