NEXTVAL 和 CURRVAL 运算符和oracle的sequence设置说明

【KMP】从原理上详解next数组和nextval数组 全网最详细的next和nextval讲解,并比较了与现在普遍的KMP算法实现中的next数组间的异同。 阅读详情

在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_sequence.CURRVAL

  emp_sequence.NEXTVAL

 

Create   Sequence  
你首先要有CREATE   SEQUENCE或者CREATE   ANY   SEQUENCE权限,  
CREATE   SEQUENCE   emp_sequence  
INCREMENT   BY   1    --   每次加几个  
START   WITH   1     --   从1开始计数  
NOMAXVALUE      --   不设置最大值  
NOCYCLE     --   一直累加,不循环  
CACHE   10;                 --缓存序列个数,有助于提高效率,但可能造成跳号。

-   如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。   使用cache或许会跳号,   比如数据库突然不正常down掉(shutdown   abort),cache中的sequence就会丢失.   所以可以在create   sequence的时候用nocache防止这种情况。 

 

NEXTVAL 和 CURRVAL 运算符(IDS)
可以通过在 SQL 语句中使用 NEXTVAL 或 CURRVAL 运算符来访问序列的值。必须用以 sequence.NEXTVAL 或 sequence.CURRVAL 格式驻留在同一个数据库中的序列名称(或同义词)来限定 NEXTVAL 或 CURRVAL。表达式也可以用所有者名来限定序列,如 zelaine.myseq.CURRVAL。可以指定 sequence 的 SQL 标识或有效同义词(如果存在的话)。


在符合 ANSI 的数据库中,如果您不是所有者,必须用所有者名(owner.sequence)限定序列名。


要对序列使用 NEXTVAL 或 CURRVAL,必须对序列具有选择特权或对数据库具有 DBA 特权。关于序列级特权的信息,请参阅 GRANT 语句。


使用
 NEXTVAL
第一次访问一个序列,在引用 sequence.CURRVAL 之前必须先引用 sequence.NEXTVAL。第一次引用 NEXTVAL,返回序列的初始值。后面每次引用 NEXTVAL,用已定义的 step 增加序列值并返回序列新的增加以后的值。


在一个 SQL 语句中只能对给定的序列增加一次。即使在一个语句中多次指定 sequence.NEXTVAL,序列也只增加一次,所以每次 sequence.NEXTVAL 出现在同一 SQL 语句中返回相同的值。


除了在同一语句中多次出现这种情况以外,每个 sequence.NEXTVAL 表达式都会增加序列,无论后来是否提交或回滚当前事务。


如果在最终回滚的事务中指定 sequence.NEXTVAL,某些序列数可能被跳过。


使用
 CURRVAL
任何对 CURRVAL 的引用返回指定序列的当前值,该值是最后一次对 NEXTVAL 的引用所返回的值。用 NEXTVAL 生成一个新值以后,可以继续使用 CURRVAL 访问这个值,不管另一个用户是否增加这个序列。


如果 sequence.CURRVAL 和 sequence.NEXTVAL 都出现在一个 SQL 语句中,则序列只增加一次。在这种情况下,每个 sequence.CURRVAL 和 sequence.NEXTVAL 表达式都返回相同的值,不管在语句中 sequence.CURRVAL 和 sequence.NEXTVAL 的顺序。


序列的并发访问

序列总是在数据库中生成唯一值,即使当多个用户并发地引用同一序列时也没有可察觉的等待或锁定。当多个用户使用 NEXTVAL 来增长序列时,每个用户生成一个其他用户不可见的唯一值。


当多个用户并发地增加同一序列时,每个用户看到的值是有差异的。例如,一个用户可能从一个序列生成一组值,如 1、4、6 和 8,而另一个用户并发地从同一序列生成值 2、3、5 和 7。


限制

NEXTVAL 
和 CURRVAL 只在 SQL 语句中有效,并不在 SPL 语句中直接有效。(但是使用 NEXTVAL 和 CURRVAL 的 SQL 语句可用于 SPL 例程。)以下限制应用于 SQL 语句中的这些运算符:


必须对序列有选择特权。
 
在 CREATE TABLE 或 ALTER TABLE 语句中,在下列上下文中不能指定 NEXTVAL 或 CURRVAL:
 
在 DEFAULT 子句中
 
在检查约束中。

在 SELECT 语句中,下列上下文中不能指定 NEXTVAL 或 CURRVAL:
 
使用 DISTINCT 关键字时在投影列表中。
 
在 WHERE、GROUP BY 或 ORDER BY 子句中
 
在子查询中
 
在 UNION 运算符结合 SELECT 语句时。

在下列这些上下文中也不能指定 NEXTVAL 或 CURRVAL:
 
在分段存储表达式中
 
在对另一个数据库中的远程序列对象的引用中。

示例

在下面的例子中,假设没有其它用户并发地访问序列并且用户连续执行语句。


示例基于下列序列和表:
 

CREATE SEQUENCE seq_2
   INCREMENT BY 1 START WITH 1
   MAXVALUE 30 MINVALUE 0
   NOCYCLE CACHE 10 ORDER;

CREATE TABLE tab1 (col1 int, col2 int);
INSERT INTO tab1 VALUES (0, 0);
可以在 INSERT 语句的 values 子句中使用 NEXTVAL(或 CURRVAL),如以下示例中所示:


INSERT INTO tab1 (col1, col2)
   VALUES (seq_2.NEXTVAL, seq_2.NEXTVAL)
在前面的例子中,数据库服务器把一个增加后的值(或序列的初始值,即 1)插入到表的 col1 和 col2 列。


可以在 UPDATE 语句的 SET 子句中使用 NEXTVAL(或 CURRVAL),如以下示例中所示:
 

UPDATE tab1
   SET col2 = seq_2.NEXTVAL
   WHERE col1 = 1;
在前面的例子中,seq_2 序列增长以后的值,即 2,替换了 col2 中 col1 等于 1 的值。


以下示例显示了如何在 SELECT 语句的 Projection 子句中使用 NEXTVAL 和 CURRVAL:


SELECT seq_2.CURRVAL, seq_2.NEXTVAL FROM tab1;
在前面的示例中,数据库服务器从 CURRVAL 和 NEXTVAL 表达式返回两行增加后的值,3 和 4。对 tab1 的第一行,数据库服务器返回 CURRVAL 和 NEXTVAL 增加后的值 3;对 tab1 的第二行,它返回增加后的值 4。

 

 

假如在创建sequence时,有意不选用cache选项,有2点需要注意:

 

1. 访问效率降低,没有cache功能的sequence取值将无法直接访问内存

2. 不论是nocache还是cache , 每次访问nextval的过程都是不可逆的,在同一session中,在执行一系列dml和sequence的操作后,用户执行rollback,希望将操作回滚,但是sequence此时就显得异常顽固,用掉的nextval将无法被重现。当下一次试图读取nextval时,sequence的指针又移动到下一位了。

 

还有sequence不属于某个表,也不属于某个字段,sequence仅仅属于某个用户。

其实在创建了sequence后,每个表都可以使用这个sequence,但是这样会引起应用的很多麻烦,因此,建议每个表都使用一个sequence。

KMP算法计算next和nextval 1.KMP。 例如:ababa(求next数组值) 从0开始 ab(默认0,1) 然后看最大匹配长度,也就是相同字符的最大匹配的长度(例如abab:最大匹配长度就是2(ab:ab)) 还没有理解看看下图(最大匹配长度为3的next数组值) 所以next数组值分别为(0,1,1,2,3) 2.KMP算法的改进(主要是因为回溯得过多,造成不必要的时间开销了) 改进了就增加了一个nextval值 nextval第一个和第二个值照写 1. a的next值为1他就回到第一个位置处,而第.. 阅读详情

相关推荐

《Oracle PLSQL实例精解》读书笔记

《Oracle PLSQL实例精解》读书笔记导读第一章 PL/SQL概念第二章 PL/SQL语言基础第三章 在PL/SQL中的SQL第四章 条件控制:IF语句第五章 条件控制:CASE语句第六章 迭代控制:第一部分第七章 迭代控制:第二部分第十九章 过程第二十章 函数 导读 以下是一部分读书笔记,内容相对零散,希望在用到时会有一点提示作用。 第一章 PL/SQL概念 PL/SQL是Oracle...

风中奇侠的博客 1282

Nextval的用法和注意事项

例如,在使用Nextval获取序列下一个值之后,其他线程可能会插入一条记录并使用相同的序列值,导致主键冲突。在上面的代码中,INCREMENT BY 1表示每次自增1,START WITH 1表示从1开始,NO MINVALUE和NO MAXVALUE表示没有最小值和最大值限制,CACHE 1表示缓存序列的值。在使用Nextval获取序列下一个值时,需要传入序列的名称。Nextval是一个用于获取序列下一个值的函数,可以确保每个新插入的行都有一个唯一的主键,保障了数据的正确性。一、Nextval简介。

qq_42514371的博客 8436

万象RK3506-EG1800网关使用说明

摘要:HD-RK3506-EG1800是一款高性能工业物联网边缘计算网关,支持Buildroot和Ubuntu双系统。文档详细介绍了网关的网络配置(包括ETH0/ETH1的静态IP设置、WiFi连接)、时钟同步、HSL软件安装配置(含开机自启动服务)、系统日志优化以及刷机操作指南(Loader/Maskrom模式)。特别提供了基于lighttpd的网页管理方案,通过HTML界面实现网络参数可视化配置,包含身份验证、实时状态显示和表单提交功能。网关默认ETH0固定IP为192.168.1.10,提供完整的CL

tian_jiangnan的博客 175

next数组介绍

首先看看next数组值的求解方法例如: 模式串 a b a a b c a c next值 0 1 1 2 2 3 1 2               next数组的求解方法是:第一位的next值为0,第二位的next值为1,后面求解每一位的next值时,根据前一位进行比较。首先将前一位与其next值对应的内容进行比较,如果相等,则该位的next值就是前一位的next值加上1;如果

QuitePig的专栏 2万+

《全连接到卷积神经网络:图像识别的演变历程》

这篇文章会从传统全连接层面临的困境说起,揭示卷积神经网络(CNN)成为图像识别核心动力的原因,探究其背后蕴含的设计思想与技术创新。但是回顾历史,CNN的出现提醒我们:技术的突破往往是由对自然规律的模仿和重新构建得来的。也许,当机器真的学会“像人一样看世界”的时候,它们的“眼睛”早就超过生物视觉的限制了。例如,用5×5的核处理224×224的输入时,只要25个参数(而不是全连接那种百万级的)。* 局部性:网络的底层只需留意局部的地方(像边缘、纹理这样的地方),不用管那些全局像素之间复杂的关系。

2401_82434295的博客 674

用面包板实测MOSFET:手把手教你测量跨导和开关时间

本文详细介绍了如何使用面包板、Arduino和示波器搭建测试平台,实测MOSFET的跨导和开关时间。通过分步测量流程和示波器技巧,帮助电子设计初学者深入理解MOSFET的动态特性,包括跨导计算、开关时间参数解析以及米勒平台现象分析。

beer8的博客 221

C语言——数据结构——计算next和nextval

计算 “next” 和 “nextval” 是在串中进行模式匹配时经常使用的概念,通常用于字符串匹配算法中的 KMP(Knuth-Morris-Pratt)算法。在 KMP 算法中,我们需要预先计算出一个称为 “next” 数组的辅助数组,它记录了模式串中每个位置的最长公共前后缀的长度。而 “nextval” 数组是在 “next” 的基础上进行了优化。 具体来说,给定一个长度为 m 的模式串,我们可以通过遍历模式串的每个位置来计算 “next” 数组

weixin_66547608的博客 6980

Arduino应用——PWM控制直流电机风扇

Arduino应用——PWM控制直流电机风扇PWM原理实验器件功能描述如何改变文本的样式插入链接与图片实现代码生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 最近在使用arduino UNO开发板完成课程小作业。其中一个要求设计一个电风扇控制系统,要求能够通过PWM调节风扇的转速。期间搜索了许多例程和方法,但受限于器件,效果不

hypecycle的博客 2万+

oracle 索引 NEXTVAL 和 CURRVAL

NEXTVAL 和 CURRVAL 运算符(IDS) 可以通过在 SQL 语句中使用 NEXTVAL 或 CURRVAL 运算符来访问序列的值。必须用以 sequence.NEXTVAL 或 sequence.CURRVAL 格式驻留在同一个数据库中的序列名称(或同义词)来限定 NEXTVAL 或 CURRVAL。表达式也可以用所有者名来限定序列,如 zelaine.myseq.CURRVAL

gxftry1st的专栏 4029

【LVGL】学习笔记--(3)界面切换以及显示优化

界面切换和帧率优化

sinat_33408502的博客 1万+

Seedance 2.5本地部署指南:AI生图与视频生成的完整实践

最近在AI生成内容领域,本地部署方案越来越受到开发者关注。特别是Seedance 2.5的发布,让很多原本依赖云端服务的用户开始转向本地化解决方案。本文将从实际使用角度出发,完整介绍Seedance 2.5的本地部署流程、功能特性对比以及实际应用技巧。 1. Seedance 2.5核心特性解析 1.1 什么是Seedance 2.5 Seedance 2.5是一款开源的AI生图和视频生成工具,支持在本地环境运行,无需联网即可实现高质量的图像和视频生成。相比之前的2.0版本,2.5在生成质量、运行效率和功能

weixin_42566121的博客 1680

sql dual nextval

http://blog.sina.com.cn/s/blog_66998a410100i3ng.html sql dual nextval dual表是什么表?   经常看到别人的存储过程中有select …………from dual   请问dual是什么表啊?      为了SQL语意完整而已   select sysdate from dual   相当与Sql S

jajavaja的专栏 1369

Stable Diffusion 模型分享:Indigo Furry mix(人类与野兽的混合)

Indigo Furry mix 是一个混合模型,出的图具有雄性人类的体型和野兽的形态。条目内容类型大模型基础模型SD 1.5来源CIVITAI作者indigowing文件名称文件大小1.99GB。

水滴的博客 1831

数据库(Oracle)序列(Sequence)的基本使用

在Oracle中可以用SEQUENCE生成自增字段。Sequence序列是Oracle中用于生成数字序列的对象,可以创建一个唯一的数字作为主键。

2301_79644036的博客 6751

题解:AcWing 6051 看病

等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。但医院的排队不同其他排队,因为多数情况下,需要病情严重的人优先看病,所以希望BSNY设计系统时,以病情的严重情况作为优先级,判断接下来谁可以去看病。具体是这样的,最近来医院看病的人越来越多了,因此很多人要排队,只有当空闲时放一批病人看病。的操作,输出此时还在排队人中,优先级最大的患者姓名和优先级。后面没有输入,但需要你输出。

团爸讲算法 589

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Oracle 中关于 sequence 对象的使用限制

Oracle 中 sequence 对象使用的限制 NEXTVAL 和 CURRVAL 只在 SQL 语句中有效,并不在 SPL 语句中直接有效。(但是使用NEXTVAL 和CURRVAL的SQL语句可用于SPL例程)以下限制应用于 SQL 语句中的这些运算符: [1]在 CREATE TABLE 或 ALTER TABLE 语句中,在下列上下文中不能指定 NEXTVAL 或 CURR

DBA never sleep-DBA,永不眠 1719

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

oracle sequence使用多,Oracle中Sequence使用的限制

在使用Oracle序列的currval和nextval时的限制创建一个序列create sequence test_seqminvalue 1maxvalue 10000000start with 1increment by 1cache 20;在delete,select,update语句的子查询中不能使用sequence的值SQL> delete from test_jy where ...

weixin_39646021的博客 225

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Oracle中序列

1.直接删除序列,然后重新创建并且设置序列的初始值为希望的数据 2、修改序列的每次增加的值,然后再修改回每次自增1

HakuMaster的博客 979

mysql创建序列发生器_Oracle序列用法

序列是由用户创建的数据库对象。序列可产生唯一的整数。序列的典型用途是制作键的值,每行必须是唯一的。Oracle内部程序生成序列,并增加或减少序列。序列是一个省时的对象,因为它可以减少应用程序中生成序列程序的代码量。序列号独立于表进行存储和生成,因此,多个表可以使用同一序列。序列是不与特定表相关联的计数器。通过创建Oracle序列和触发器,可以自动增加表的主键。序列通常用于填充主键和计数。【序列用法...

weixin_31629313的博客 289

oracle小测试

(卓沃数据库开发工程师测试题)(10)4、写出left join 、right join 、 full join 、inner join 的区别。一般都需要提供用户名、口令和数据库连接串以下哪个文件中存储了对数据库连接串的定义。语句查询出所有文章的最后修改人和修改时间。数据库中,下面()可以作为有效的列名。科目相应月份的发生额高的科目。被删除的记录彻底从数据库中被删除掉了。被删除的记录只是当前用户看不到了。表存放文章的修改记录,有以下字段。下列关于表和视图的说法正确的是。语言中,删除基本表的语句是。

m0_58370873的博客 255

Oracle

OracleOracle0.概念1.数据库对象1.1 视图 View1.1.1 创建视图的语法1.1.2 视图的查询1.1.3 视图的作用1.1.4 授权创建视图1.1.5 创建简单视图(单表)1.1.6 创建复杂视图(多表)1.1.7 查询当前用户名下的所有视图1.1.8 删除视图1.1.9 同一数据库,两个不同账户之间表的授权1.2 序列 SEQ1.2.1 什么是序列?1.2.2 创建序列1.2.3 查询用户的序列1.2.4 删除序列1.3 索引1.3.1 索引的概念1.3.2 创建索引1.3.3修改和

weixin_43766298的博客 1185

移动互联网数据库应用与开发(Oracle)考试重点

1.关系模型的表达方式:二维表 2.数据库中存储的基本对象是数据。 3.数据库系统的核心是DBMS. 4.DBMS的主要功能? 1)数据库的定义功能( DDL ,数据库三级结构、两级映象) 2)数据库的操纵功能( DML ,过程性 DML (层次和网状)和非过程性 DML (关系型) ) 3)数据库的保护功能(恢复、并发、完整性、安全性) 4)数据库的维护功能( DB 的载入、转换、转储等) 5)数据字典(存放三级结构定义的数据库) 5.SQL 例:查询需要使用的学生表student和班级表classes。

manong3041的博客 422
上一篇: 有关InitialContext()的困惑
下一篇: format对数字的特殊处理 PowerBuilder
rudyMatrix
博客等级 码龄20年 38粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值