`

序列初始化过了,但每次currval都要先nextval,为何?

阅读更多
序列已经初始化过了,但每次要得到seq.currval都要先nextval,为何?

我定义了一个序列,从1开始计数的,已经运行过select ...nextval from dual了。
CREATE SEQUENCE seq_v4u;
select seq_v4u.nextval from dual;

但是我发现每个session要使用currval之前还是要求输入一个select nextval....这是为什么呢?

SQL> select seq_v4u.currval from dual;
select seq_v4u.currval from dual
*
ERROR at line 1:
ORA-08002: sequence SEQ_V4U.CURRVAL is not yet defined in this session


SQL> select seq_v4u.nextval from dual;

   NEXTVAL
----------
        43

SQL> select seq_v4u.currval from dual;

   CURRVAL
----------
        43

unix下查看刚才那个错误:
> oerr ora 8002
08002, 00000, "sequence %s.CURRVAL is not yet defined in this session"
// *Cause: sequence CURRVAL has been selected before sequence NEXTVAL
// *Action: select NEXTVAL from the sequence before selecting CURRVAL


奇怪了,为何每个新的session都需要我选一次nextval? 这样的话我得到的currval不是我需要的值啊!

请指点!!!!

 

最佳答案
renxiao2003
在使用CURRVAL之前必须先使用NEXTVAL


ORACLE的序列规范就是这么定义的,呵呵!:-)
第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。
分享到:
评论

相关推荐

    mysql currval 和 nextval 函数的实现.txt

    mysql currval 和 nextval 函数的实现

    sequence等同于序列号

    在Oracle数据库中,sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方。 1、Create Sequence (注释:你需要有CREATE SEQUENCE或CREATE ANY SEQUENCE权限) CREATE ...

    11.Oracle序列生成器1

    2、在dual虚表使用序列序列创建后,用序列名.nextval获取序列的下一个值,用序列名.currval来查看当前值 3、在SQL语句中使用序列我们先创建一个

    PostgreSQL教程(七):函数和操作符详解(3)

     序列对象(也叫序列生成器)都是用CREATE SEQUENCE创建的特殊的单行表。一个序列对象通常用于为行或者表生成唯一的标识符。下面序列函数,为我们从序列对象中获取最新的序列值提供了简单和并发读取安全的方法。   ...

    MySQL实现类似Oracle序列的方案

    MySQL实现类似Oracle的序列...Oracle序列的使用,无非是使用.nextval和.currval伪列,基本想法是: 1、MySQL中新建表,用于存储序列名称和值; 2、创建函数,用于获取序列表中的值; 具体如下: 表结构为:  drop tabl

    oracle数据库经典题目

    文本初始化参数文件是一个本地的初始化参数文件,而服务器初始化参数文件是一个放在数据库服务器端的共享的二进制初始化参数文件。文本参数文件的修改是通过直接对文本的修改实现的,通过命令行是无法将修改后的参数...

    刚做的一个投票系统

    流程为houtai.jsp,testitem(一个详细页),item_do(不同的按钮 点击,不同的处理根据action=?来传值) 2.vote2_do.jsp String sql2="insert into vote(id,topic,mul) values(vote_sq.nextval,'" topic "','" mul ...

    Oracle事例

    可以在服务器端,也可以在客户端建立,但必须注意,两台服务器之间 数据库必须可以互访,必须各有各自的别名数据库 18、查看数据库链路 select * from all_db_links; select * from user_db_links; 查询 select...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 常见的数据模型 1. 层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS...

    总结了java容易出错的信息 以及错误信息类型

    总结了java容易出错的信息 以及错误信息类型

    Oracle8i_9i数据库基础

    §11.2.1 什么是PL/SQL? 231 §11.2.1 PL/SQL的好处 232 §11.2.1.1 有利于客户/服务器环境应用的运行 232 §11.2.1.2 适合于客户环境 232 §11.2.1.3 客户及服务器端的好处 232 §11.2.2 PL/SQL 可用的SQL语句 233 ...

    SQL培训第一期

    结构化查询语言(Structured Query Language)简称SQL,是一种关系数据库查询语言,用于存取数据以及查询、更新和管理关系数据库系统。 1.2 语句结构 1.2.1 数据查询语言(DQL) 对数据库进行的信息查询,select。 ...

Global site tag (gtag.js) - Google Analytics