-
2021-04-30 07:52:12
}] //最大值
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //循环/不循环
[{CACHE n | NOCACHE}];//分配并存入到内存中
NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用
CURRVAL 中存放序列的当前值
NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效
Create sequence seqEmp increment by 1 start with 1 maxvalue 3 minvalue 1
Cycle cache 2;
//先nextval 后 currval
Select seqEmp.nextval from dual;
Select seqEmp.currval from dual;
Cache
//解释
{
Create 创建
Sequence 序列 seqEmop 序列名称
Increment by 步长
Stat with 1 开始值
Maxvalue 最大值
Minvalue 最小值
Cycle 循环 nocycle 不循环
Cache 缓存 Cache
Nextvalue 下一个
Currval 当前值
}
//实例应用
//实现id的自动递增
//第一步
create table cdpt(
id number(6),
name varchar2(30),
constraint pk_id primary key(id)
);
Create sequence seq_cdpt
Increment by 1
Start with 1
Maxvalue 999999
Minvalue 1
Nocycle
nocache
insert into cdpt values(seq_cdpt.nextval,’feffefe’);
commit;
select * from cdpt;
/使用序列
会产生裂缝
l 序列在下列情况下出现裂缝:
? 回滚
? 系统异常
>多个表同时使用同一序列
//修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存
alter SEQUENCE sequence //创建序列名称
[INCREMENT BY n] //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1
[START WITH n] //开始的值,递增默认是minvalue 递减是maxvalue
[{MAXVALUE n | NOMAXVALUE}] //最大值
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //循环/不循环
[{CACHE n | NOCACHE}];//分配并存入到内存中
修改序列的注意事项:
l 必须是序列的拥有者或对序列有 ALTER 权限
l 只有将来的序列值会被改变
l 改变序列的初始值只能通过删除序列之后重建序列的方法实现
删除序列
l 使用DROP SEQUENCE 语句删除序列
l 删除之后,序列不能再次被引用
Alter sequence seqEmp maxvalue 5;
Select seqEmp.nextval from dual;
oracle序列详解
标签:oca rom lte stat arc 数据 acl 实现 under
本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:http://www.cnblogs.com/dingjing0518/p/6876528.html
更多相关内容 -
Oracle转MySQL日记(三) —关于Oracle序列(Sequence)的转化
2020-12-14 10:37:05方法一:Oracle序列直接转化为MySQL主键自增 MySQL代码如下: alter table user modify id integer auto_increment ; 其中:user为表名; id为主键 在数据库工具中也可以设置(navicat): 原创文章 3获赞 1访问... -
MySQL实现类似Oracle序列的方案
2021-01-19 22:44:48本文记录了一个模拟Oracle序列的方案,重点是想法,代码其次。 Oracle序列的使用,无非是使用.nextval和.currval伪列,基本想法是: 1、MySQL中新建表,用于存储序列名称和值; 2、创建函数,用于获取序列表中的值;... -
Oracle序列
2021-05-03 04:36:42创建序列序列:用于产生唯一序号的数据库对象,可以为多个数据库用户依次生成不重复的连续整数,通常 使用序列生成自动生成表中的主键值。在用户自己的模式中创建序列时,必须具有CREATE SEQUENCE系统权限;在其他...一.创建序列
序列:用于产生唯一序号的数据库对象,可以为多个数据库用户依次生成不重复的连续整数,通常 使用序列生成自动生成表中的主键值。
在用户自己的模式中创建序列时,必须具有CREATE SEQUENCE系统权限;
在其他用户模式中创建序列时,必须具有CREATE ANY SEQUENCE系统权限;
1、创建序列语句:
CREATESEQUENCE seq_name[START WITH start]
[INCREMENT BY increment]
[MINVALUE minvalue|NOMINVALUE]
[MAXVALUE maxvalue|NOMAXVALUE]
[CACHE cache |NOCACHE]
[CYCLE |NOCYCLE]
2、参数说明:
START WITH :用于指定初始值
INCREMENT BY :用于指定序列增量(默认为1)
MINVALUE|NOMINVALUE:可生成的最小序列值,默认为 nominvalue
MAXVALUE|NOMAXVALUE:可生成的最大序列值,默认为 nomaxvalue
CACHE |NOCACHE:指定在内存中可以预分配的序列号个数,默认为20
CYCLE |NOCYCLE:指定在达到序列的最大值或最小值之后是否继续复位重新生成序列号,默认为nocycle
例1:创建一个序列deptno_seq ,其开始值为10,增量为5,内存可预分配10个序列号
实现的语句
CREATESEQUENCE deptno_seq
STARTWITH 10INCREMENTBY 5CACHE10;
二.使用序列
序列具有 CURRVAL和 NEXTVAL两个伪列。 CURRVAL返回序列的当前值, NEXTVAL在序列中产生新值并返回此值。 CURRVAL和 NEXTVAL都返回 NUMBER类型值。可以通过sequence name. CURRVAL和 sequence name. NEXTVAL形式来应用序列。
可以在下列语句中使用序列的 NEXTVAL和 CURRVAL伪列:
● SELECT语句的目标列中;
● INSERT语句的子查询的目标列中;
● INSERT语句的 VALUES子句中;
● UPDATE语句的SET子句中。
在下列语句中不允许使用序列的 NEXTVAL和 CURRVAL伪列:
●对视图查询的SELECT目标列中;
●使用了DISTINCT关键字的 SELECT语句中;
● SELECTGROUP语句中使用了 BY、 HAVING或 ORDER BY子句时;
●在 SELECT、 DELETE或 UPDATE语句的子查询中;
●在CREATE TABLE或 ALTER TABLE语句中的默认值表达式中。
产生序列的第一个值:
SELECT test sequence. NEXTVAL FROM DUAL;
产生序列的下一个值:
SELECT test sequence. NEXTVAL FROM DUAL;
产生序列的当前值:
SELECT test sequence. CURRVAL FROM DUAL;
注意第一次调用 NEXTVAL产生序列的初始值,根据定义知道初始值为10;第二次调用产生11,因为序列的步长为1.调用 CURRVAL,显示当前值11,不产生新值。
例2:使用序列deptno_seq
向部门表dept中录入记录,要求列deptno使用序列值。
实现的语句:
INSERT INTOdeptVALUES(deptno_seq.nextval,’销售部’)
查询序列deptno_seq的当前值:
select deptno_seq.currval from dual;
三.查询序列
可通过查询数据字典USER_SEQUENCES显示当前用户的所有序列的详细信息。
SQL>SELECTincrement_by, cache_size, max_value, last_numberFROMuser_sequencesWHERE sequence_name=‘DEPTNO_SEQ’;
四.修改序列
1、修改序列的语句格式:
ALTERSEQUENCE sequence_name[INCREMENT BY increment]
[MINVALUE minvalue|NOMINVALUE]
[MAXVALUE maxvalue|NOMAXVALUE]
[CACHE cache |NOCACHE]
[CYCLE |NOCYCLE]
注意:用户需要有ALTER SEQUENCE权限
注意:序列的初始值不能修改
【示例】修改序列sfudent_Seq的步长为1,缓存值的个数为5
SQL>ALTER SEQUENCE student _seq INCREMENT BY 1 CACHE 5;
五.删除序列
当一个序列不再需要时,可以使用 DROP SEQUENCE语句删除序列。删除序列时,系统将序列的定义从数据字典中删除,对于之前序列的应用没有任何影响。
删除序列的语句格式:
DROP SEQUENCE sequence_name
【示例】删除序列 student_seq
SQL>DROP SEQUENCE student seq;
-
Oracle 序列
2019-08-08 01:03:27NULL 博文链接:https://chaoyi.iteye.com/blog/2146830 -
批量修改Oracle序列值的存储过程
2019-03-15 01:14:21NULL 博文链接:https://zzx0421.iteye.com/blog/335955 -
Oracle序列的创建与使用
2020-12-14 23:11:42创建序列demo_s: create sequence demo_s minvalue 1000 maxvalue 999999999999999999 start with 1000 increment by 1 cache 20; 解释: INCREMENT BY:指定序列增长步长。可以为正... -
查询oracle序列值(一)_数据库更新某个字段为序列值
2020-09-08 08:28:26学 海 无 涯 PAGE PAGE 1 查询oracle序列值 在数据源增加引用 System.Configuration System.Data.OracleClient 在相关表的对象类中增加using: using System.Data.OracleClient; using System.Configuration; 用以下... -
Oracle序列sequence 深入理解
2021-05-02 01:24:32Oracle序列:序列(Sequence)创建、使用、修改、删除,序列(Sequence)是用来生成连续的整数数据的对象。序列常常用来作为主键中增长列,序列中的可以升序生成,也可以降序生成。语法:创建序列CREATE SEQUENCE ...Oracle序列:序列(Sequence)创建、使用、修改、删除,序列(Sequence)是用来生成连续的整数数据的对象。序列常常用来作为主键中增长列,序列中的可以升序生成,也可以降序生成。
语法:创建序列
CREATE SEQUENCE sequence_name
[START WITH num]
[INCREMENT BY increment]
[MAXVALUE num|NOMAXVALUE]
[MINVALUE num|NOMINVALUE]
[CYCLE|NOCYCLE]
[CACHE num|NOCACHE]
语法解析:
START WITH:从某一个整数开始,升序默认值是1,降序默认值是-1。
INCREMENT BY:增长数。如果是正数则升序生成,如果是负数则降序生成。升序默认值是1,降序默认值是-1。
MAXVALUE:指最大值。
NOMAXVALUE:这是最大值的默认选项,升序的最大值是:1027,降序默认值是-1。
MINVALUE:指最小值。
NOMINVALUE:这是默认值选项,升序默认值是1,降序默认值是-1026。
CYCLE:表示如果升序达到最大值后,从最小值重新开始;如果是降序序列,达到最小值后,从最大值重新开始。
NOCYCLE:表示不重新开始,序列升序达到最大值、降序达到最小值后就报错。默认NOCYCLE。
CACHE:使用CACHE选项时,该序列会根据序列规则预生成一组序列号。保留在内存中,当使用下一个序列号时,可以更快的响应。当内存中的序列号用完时,系统再生成一组新的序列号,并保存在缓存中,这样可以提高生成序列号的效率。Oracle默认会生产20个序列号。
NOCACHE:不预先在内存中生成序列号。
案例2:创建一个从1开始,默认最大值,每次增长1的序列,要求NOCYCLE,缓存中有30个预先分配好的序列号。
代码演示:生成序列号
SQL> CREATE SEQUENCE MYSEQ
MINVALUE 1
START WITH 1
NOMAXVALUE
INCREMENT BY 1
NOCYCLE
CACHE 30
/
Sequence created
序列创建之后,可以通过序列对象的CURRVAL和NEXTVAL两个“伪列”分别访问该序列的当前值和下一个值。
使用序列:
SQL> SELECT MYSEQ.NEXTVAL FROM DUAL;
NEXTVAL
----------
1
SQL> SELECT MYSEQ.NEXTVAL FROM DUAL;
NEXTVAL
----------
2
SQL> SELECT MYSEQ.CURRVAL FROM DUAL;
CURRVAL
----------
2
使用ALTER SEQUENCE可以修改序列,在修改序列时有如下限制:
你或者是该sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create .
1. 不能修改序列的初始值。
2. 最小值不能大于当前值。
3. 最大值不能小于当前值。
使用DROP SEQUENCE命令可以删除一个序列对象。
序列修改和删除
SQL> ALTER SEQUENCE MYSEQ
MAXVALUE 10000
MINVALUE -300
/
SEQUENCE ALTERED
删除:
SQL> DROP SEQUENCE MYSEQ;
SEQUENCE DROPPED
Oracle序列:序列(Sequence)创建、使用、修改、删除,序列(Sequence)是用来生成连续的整数数据的对象。序列常常用来作为主键中增长列,序列中的可以升序生成,也可以降序生成。
语法:创建序列
CREATE SEQUENCE sequence_name
[START WITH num]
[INCREMENT BY increment]
[MAXVALUE num|NOMAXVALUE]
[MINVALUE num|NOMINVALUE]
[CYCLE|NOCYCLE]
[CACHE num|NOCACHE]
语法解析:
START WITH:从某一个整数开始,升序默认值是1,降序默认值是-1。
INCREMENT BY:增长数。如果是正数则升序生成,如果是负数则降序生成。升序默认值是1,降序默认值是-1。
MAXVALUE:指最大值。
NOMAXVALUE:这是最大值的默认选项,升序的最大值是:1027,降序默认值是-1。
MINVALUE:指最小值。
NOMINVALUE:这是默认值选项,升序默认值是1,降序默认值是-1026。
CYCLE:表示如果升序达到最大值后,从最小值重新开始;如果是降序序列,达到最小值后,从最大值重新开始。
NOCYCLE:表示不重新开始,序列升序达到最大值、降序达到最小值后就报错。默认NOCYCLE。
CACHE:使用CACHE选项时,该序列会根据序列规则预生成一组序列号。保留在内存中,当使用下一个序列号时,可以更快的响应。当内存中的序列号用完时,系统再生成一组新的序列号,并保存在缓存中,这样可以提高生成序列号的效率。Oracle默认会生产20个序列号。
NOCACHE:不预先在内存中生成序列号。
案例2:创建一个从1开始,默认最大值,每次增长1的序列,要求NOCYCLE,缓存中有30个预先分配好的序列号。
代码演示:生成序列号
SQL> CREATE SEQUENCE MYSEQ
MINVALUE 1
START WITH 1
NOMAXVALUE
INCREMENT BY 1
NOCYCLE
CACHE 30
/
Sequence created
序列创建之后,可以通过序列对象的CURRVAL和NEXTVAL两个“伪列”分别访问该序列的当前值和下一个值。
使用序列:
SQL> SELECT MYSEQ.NEXTVAL FROM DUAL;
NEXTVAL
----------
1
SQL> SELECT MYSEQ.NEXTVAL FROM DUAL;
NEXTVAL
----------
2
SQL> SELECT MYSEQ.CURRVAL FROM DUAL;
CURRVAL
----------
2
使用ALTER SEQUENCE可以修改序列,在修改序列时有如下限制:
你或者是该sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create .
1. 不能修改序列的初始值。
2. 最小值不能大于当前值。
3. 最大值不能小于当前值。
使用DROP SEQUENCE命令可以删除一个序列对象。
序列修改和删除
SQL> ALTER SEQUENCE MYSEQ
MAXVALUE 10000
MINVALUE -300
/
SEQUENCE ALTERED
删除:
SQL> DROP SEQUENCE MYSEQ;
SEQUENCE DROPPED
-
mysql生成oracle序列
2019-07-11 19:55:06文档 里面包含了 mysql创建 oracle序列的脚本,数据库表、函数、使用案例 sql和截图 ,自带 根据步长和值长度,到数据最大时返回0;手册说明详细,表名字段都有解释,一看就懂 -
oracle 重置序列从指定数字开始的方法详解
2020-12-15 13:32:26重置oracle序列从指定数字开始 代码如下: declare n number(10); v_startnum number(10):=10000001;–从多少开始 v_step number(10):=1;–步进 tsql varchar2(200); v_seqname varchar2(200):=’MIP_JF_SEQUENCE’;... -
MyBatis Oracle 自增序列的实现方法
2020-09-01 07:20:37给大家分享MyBatis Oracle 自增序列的实现方法及mybatis配置oracle的主键自增长的方法,非常不错具有一定的参考借鉴价值,感兴趣的朋友一起看看吧 -
ORACLE 序列-整理
2021-05-02 02:42:47序列(sequence)是ORACLE数据库库实现列自动增长的唯一方式。创建序列语法如下:CREATE SEQUENCE sequence //创建序列名称[INCREMENT BY n] //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1[START ...序列(sequence)是ORACLE数据库库实现列自动增长的唯一方式。
创建序列语法如下:
CREATE SEQUENCE sequence //创建序列名称
[INCREMENT BY n] //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1
[START WITH n] //开始的值,递增默认是minvalue 递减是maxvalue
[{MAXVALUE n | NOMAXVALUE}] //最大值
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //循环/不循环
[{CACHE n | NOCACHE}];//分配并存入到内存中
直接使用示例来说明:
1、创建test2表
SQL> create table test2(id int,name varchar2(10));
Table created
2、创建序列为test2表id列使用
create SEQUENCE seq_test2
increment by 1
start with 1
Maxvalue 999999
Minvalue 1
Nocycle
nocache
Sequence created
3、使用序列为test2表新增数据
SQL> insert into test2 values(seq_test.nextval,'令狐冲');
1 row inserted
SQL> insert into test2 values(seq_test.nextval,'令狐冲');
1 row inserted
SQL> insert into test2 values(seq_test.nextval,'令狐冲');
1 row inserted
SQL> insert into test2 values(seq_test.nextval,'令狐冲');
1 row inserted
SQL> insert into test2 values(seq_test.nextval,'令狐冲');
1 row inserted
SQL> insert into test2 values(seq_test.nextval,'令狐冲');
1 row inserted
SQL> insert into test2 values(seq_test.nextval,'令狐冲');
SQL> commit;
Commit complete
SQL> select * from test2;
ID NAME
--------------------------------------- ----------
1 令狐冲
2 令狐冲
3 令狐冲
4 令狐冲
5 令狐冲
6 令狐冲
7 令狐冲
7 rows selected
--说明:插入数据成功,ID为自动增长数字。seq_test.nextval 是获取到序列的下个值,将获取到下一个值插入到该列中;seq_test.currval获取到当前序列的值
--附加:执行新增语句时不想用seq_test.nextval手动指定该列值时,创建触发器调用该序列。后台将自动触发插入ID值,插入SQL语句为
insert into test2 values('令狐冲');
4、使用oracle dual表测试序列seq_test.nextval、seq_test.currval属性
SQL> Select seq_test.nextval from dual;
NEXTVAL
----------
8
SQL> Select seq_test.nextval from dual;
NEXTVAL
----------
9
......
SQL> Select seq_test.nextval from dual;
NEXTVAL
----------
15
SQL> Select seq_test.currval from dual; --seq_test.currval 获取到当前的序列号
CURRVAL
----------
15
每在一张表中调用seq_test.nextval属性,不管有没有插入成功,只要调用seq_test.nextva,序列值都会自增长逐步增长;
5、sequence修改
alter SEQUENCE sequence //创建序列名称
[INCREMENT BY n] //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1
[START WITH n] //开始的值,递增默认是minvalue 递减是maxvalue
[{MAXVALUE n | NOMAXVALUE}] //最大值
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //循环/不循环
[{CACHE n | NOCACHE}];//分配并存入到内存中
除了[START WITH n]字段不能修改外,其余语法和创建时一样
6、sequence删除
DROP SEQUENCE 序列名
SQL> DROP SEQUENCE seq_test; Sequence dropped
-
Oracle 序列的使用与说明
2021-05-02 10:08:241、序列的创建与说明创建序列,Oracle序列的语法格式为:CREATE SEQUENCE 序列名[INCREMENT BY n][START WITH n][{MAXVALUE/ MINVALUE n|NOMAXVALUE}][{CYCLE|NOCYCLE}][{CACHE n|NOCACHE}];1)INCREMENT BY用于定义... -
oracle序列创建、修改、删除
2011-10-08 14:52:08最近项目中要用oracle中的序列相关的内容,本人对oracle是小白一个,没办法只能在网上找相关的资源,还好,发现了一些,感觉挺实用的,就分享给大家了,该资源是oracle序列的创建、修改、以及删除的相关操作,有用例... -
oracle序列创建同义词
2021-05-06 00:46:04connect 是使用 oracle 的简单权限,这种权限只有在对其他 用户... 拥有 connect role 的用户还能够创建表、视图、序列(sequence)、簇(cluster)、同义词 ......21.要创建 Oracle 标准表,使用___CREATE TABLE___语句, ... -
oracle序列跳号,回跳
2021-03-17 22:14:01单机跳号 集群跳号,回跳 SEQUENCE cache原理: oracle管理序列方法: 序列等待事件 -
Oracle序列(Sequence)创建、使用、修改、删除
2021-04-30 11:35:12Oracle序列(Sequence)创建、使用、修改、删除一: 创建序列:语法:CREATE SEQUENCE sequence_name[START WITH num][INCREMENT BY increment][MAXVALUE num|NOMAXVALUE][MINVALUE num|NOMINVALUE][CYCLE|NOCYCLE]... -
Oracle序列的使用与说明
2021-05-06 06:35:371、序列的创建与说明 创建序列,Oracle序列的语法格式为:CREATE SEQUENCE 序列名[INCREMENT BY n][START WITH n][{MAXVALUE/ MI1、序列的创建与说明创建序列,Oracle序列的语法格式为:CREATE SEQUENCE 序列名... -
oracle 序列迁移
2020-04-02 10:57:351.oracle 序列迁移 背景:需要对oracle数据库的数据进行迁移,数据表都迁移过去了,但序列未跟随表,这个在oracle中是单独存在的,不像mysql,序列是和表关联在一起的。言归正传,oracle中的序列 SELECT 'drop ... -
oracle序列完美实例
2015-11-21 14:48:21网上很多讲序列的文章,但是讲的不够详细,看了这个,秒懂 oracle的用法,内容包含使用场景全冲用法介绍 -
oracle 序列,程序中实现自增
2022-03-29 21:40:34序列1.1 作用和含义1.2 序列的使用 一.序列 1.1 作用和含义 序列是用于生成唯一、连续序号的对象; 可以是升序的,也可以是降序的; 使用create sequence语句创建序列 create sequence 序列名 start with 1 ... -
Oracle序列详解
2021-05-01 03:43:021.基本语法(1) 创建序列命CREATE SEQUENCE [user.]sequence_name[INCREMENT BY n][START WITH n][maxvalue n | nomaxvalue][minvalue n | nominvalue][CYCLE|NOCYCLE][CACHE|NOCACHE][ORDER|NOORDER];INCREMENT BY:... -
ORACLE 序列重置
2020-10-13 10:19:56ORACLE中一般将自增sequence重置时,都是删除再重建,这种方式有很多弊端,依赖它的函数和存储过程将失效,需要重新编译。 不过还有种巧妙的方式,不用删除,利用步长参数,先查出sequence的nextval,记住,把递增改... -
ORACLE序列(字段自增长)
2021-05-07 02:59:38Ø自动提供唯一的数值Ø共享对象Ø主要用于提供主键值Ø将序列值装入内存可以提高访问效率创建序列:1、要有创建序列的权限createsequence或createanysequence2、创建序列的语法CREATESEQUENCEsequence//创建序列... -
ORACLE序列操作
2020-02-25 10:03:53#创建序列 CREATE SEQUENCE Tempinfo_seq INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXvalue -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10; --设置缓存cache个序列,... -
MySQL生成Oracle序列参考案例
2021-05-21 15:49:53文档 里面包含了 mysql创建 oracle序列的脚本,数据库表、函数、使用案例 sql和截图 ,自带 根据步长和值长度,到数据最大时返回0;手册说明详细,表名字段都有解释,一看就懂