`
flash7783
  • 浏览: 309460 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

序列初始化过了,但每次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,其值就是不一样的。
分享到:
评论

相关推荐

    oracle的序列

    需要注意的是,在序列刚被创建后,其初始CURRVAL值为NULL,因此在首次使用CURRVAL前,需要通过NEXTVAL来初始化序列。 **初始化序列**: ```sql SELECT 序列名.NEXTVAL FROM DUAL; ``` **查看当前值**: ``...

    Oracle数据库操作序列的一些常用命令

    `START WITH 1495`则指定了序列的初始值为1495。可以根据具体需求调整这些参数。 #### 二、查看序列信息(Query Sequence Information) 在Oracle数据库中,可以通过查询`USER_SEQUENCES`视图来获取关于序列的详细...

    sequence等同于序列号

    2. **CURRVAL的使用**:必须先调用一次`NEXTVAL`才能使用`CURRVAL`,否则会出错。 3. **CACHE的影响**:如果设置了`CACHE`值,Oracle会预先在内存中存储一些序列值,以加快访问速度。但如果数据库异常关闭,可能会...

    ORACLE SEQUENCE的简单介绍

    #### 六、影响 Sequence 的初始化参数 (Initialization Parameters) `SEQUENCE_CACHE_ENTRIES` 参数可以设置能够同时被缓存的 Sequence 数量。如果需要删除 Sequence,可以使用 `DROP SEQUENCE` 命令。 ```sql ...

    oracle中的sequence实现主键增长

    Oracle中的Sequence是数据库管理系统提供的一种机制,用于生成序列化的整数,通常用于主键或唯一标识符,确保数据的唯一性和有序性。在Oracle中,Sequence不同于其他数据库系统的自增字段,例如SQL Server中的`...

    00576 Oracle公司内部数据库培训资料-Les12_其它数据库对象(PPT 24页).ppt

    START WITH n -- 初始化序列的起始值 MAXVALUE n -- 设置最大值,达到后可选是否循环 MINVALUE n -- 设置最小值 CYCLE -- 当达到最大值时,重新开始 NOCYCLE -- 达到最大值后停止 CACHE n -- 缓存的序列值数量...

    mysql雪花算法生成唯一整型ID主键的实现方法

    为了初始化序列,我们可以插入一条记录到`sequence`表,并调用`setval`函数设置初始值。例如,这里使用了一个19位的UUID_SHORT()生成的数值,加上特定前缀"1987",使其与雪花算法的长度和格式保持一致: ```sql ...

    oracle 数据库实例教程 第10讲.ppt

    - **NEXTVAL** 和 **CURRVAL**:这两个是序列的伪列,`NEXTVAL`返回序列的下一个值,`CURRVAL`返回当前已获取但未使用的值。 **示例 10.1** 创建了一个名为`seq_1`的序列,起始于50,每次增加10,最大值为99,缓存...

    oracle数据库应用.docx

    序列值可以通过NEXTVAL和CURRVAL伪列获取,NEXTVAL返回序列的下一个值,而CURRVAL返回最近使用的值。 2.2.3 更改序列 ALTER SEQUENCE语句允许修改序列的属性,如更改初始值或增量。 2.2.4 删除序列 DROP SEQUENCE...

    Oracle创建自增字段--ORACLE SEQUENCE的简单使用介绍

    如果希望调整数据库中缓存的序列数量,可以通过初始化参数`SEQUENCE_CACHE_ENTRIES`进行设置。而要删除序列,可以使用`DROP SEQUENCE`命令: ```sql DROP SEQUENCE order_seq; ``` 总之,Oracle的序列是实现自增...

    Oracle创建自增字段sequence

    需要注意的是,`CURRVAL`必须在首次使用`NEXTVAL`初始化序列后才能使用,否则会导致错误。同时,每个`NEXTVAL`调用都会增加序列值,因此在同一个SQL语句中多次调用`NEXTVAL`将得到不同的值。 在实际应用中,序列常...

    oracle讲解Chapter3.pptx

    例如,创建一个名为`venseq`的序列,初始值为1,每次递增1,最大值和最小值都为10,且允许循环和缓存4个值的命令如下: ```sql CREATE SEQUENCE venseq INCREMENT BY 1 START WITH 1 MAXVALUE 10 MINVALUE 1 CYCLE ...

    北大青鸟Oracle ppt4

    序列可以在同一事务中多次使用,但注意`CURRVAL`必须在`NEXTVAL`初始化后使用,并且`CACHE`选项可以预缓存序列值以提高性能,但可能导致跳号现象。 【视图】视图是基于一个或多个表的虚拟表,它可以根据需要定制...

    视图与查询oracle

    序列可以通过NEXTVAL获取下一个值,CURRVAL获取当前值。修改序列时,START WITH参数不可更改。序列可以在表中自动填充主键字段,简化数据插入操作。 总的来说,视图、索引、同义词和序列都是Oracle数据库中提升效率...

    第8章 Oracle 的其它对象.pptx

    例如,可以使用`ALL_SEQUENCES`和`USER_SEQUENCES`数据字典视图查询序列信息,通过`NEXTVAL`和`CURRVAL`伪列获取序列的下一个值或当前值,使用`ALTER SEQUENCE`命令修改序列的属性。 综上所述,Oracle的这些对象...

    Oracle数据库系统视频教程笔记

    `CREATE SEQUENCE myseq START WITH 1 INCREMENT BY 1 ORDER NOCYCLE` 创建了名为myseq的序列,初始值为1,每次递增1,有序且不循环。`NEXTVAL` 获取序列的下一个值,`CURRVAL` 获取当前值。 4. **触发器**:触发器...

    Oracle存储过程和触发器实例

    存储过程首先插入一条记录,使用 `nextval` 获取序列的下一个值,然后通过 `currval` 获取当前值并将其返回给 `UserID`。 ```sql create or replace procedure InsertRecordWithSequence(UserID out number,...

    oracle数据库经典题目

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

    AliSQL数据库开源功能特性.pdf

    用户可以通过`CREATE SEQUENCE`语句定义序列,并使用`NEXTVAL`或`CURRVAL`获取序列的下一个或当前值。Sequence Engine支持初始化设置、缓存、独立事务和备份功能,提高了在多并发场景下生成唯一标识的效率和可靠性。...

    Informatica PowerCenter V7.1.2功能特性介绍

    - 如果希望这些目标获得相同的KEY值,则包括NEXTVAL和CURRVAL在内的所有字段都需要先通过Expression组件进行处理。 #### 2. 共享的 Sequence Generator 组件 **共享的Sequence Generator** 组件允许在一个或多个...

Global site tag (gtag.js) - Google Analytics