如何使用Oracle序列:
创新互联专注于永春企业网站建设,成都响应式网站建设公司,商城开发。永春网站建设公司,为永春等地区提供建站服务。全流程按需求定制网站,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
Oracle序列(sequence)是一种数据库项,能够生成一个整数序列。通常用于填充数字类型的主键列。
1、创建序列:
CREATE SEQUENCE sequence_name
[START WITH start_num]
[INCREMENT BY increment_num]
[{MAXVALUE maximum_num|NOMAXVALUE}]
[{MINVALUE minimum_num|NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE cache_num|NOCACHE}]
[{ORDER|NOORDER}]
其中:
start_num:序列开始整数
increment_num:每次增加的整数增量
maximum:序列最大整数
minimum:序列最小整数
CYCLE:循环生成
NOCYCLE:不循环生成,默认值
cache_num:保存在内存中的整数的个数
NOCACHE:不缓存任何整数
例如:
CREATE SEQUENCE seq_test;(默认值)
CREATE SEQUENCE seq_test START WITH 1 INCREMENT BY 2;
2、使用序列:
SELECT seq_test.nextval FROM dual;
insert into order_status2 (id) values (seq_test.nextval);
3、修改序列:
ALTER SEQUENCE语句来修改序列。可以修改的内容:
不能修改序列的初值
序列的最小值不能大于当前值
序列的最大值不能小于当前值
例如:ALTER SEQUENCE seq_test INCREMENT BY 3;
4、删除序列:
DROP SEQUENCE seq_test;
主键表 - T表 '100W'数据同步到T1表(同步:TRUNCATE/DELETE或IMPDP...等方式[手动改数据])
例如: T表对应SEQ_T.NEXTVAL= 100W;
T1表对应SEQ_T.NEXTVAL= 10W;
TRUNCATE TABLE T1;
INSERT TABLE T1 SELECT * FROM T;
数据同步但T1表对应SEQ_T.NEXTVAL= 10W序列不变;
此时T1调用序列INSERT到T1表时就会报错 ( ORA-00001 : 违反唯一约束条件 (LOTTERY.PK_T1))
(若批量同步很多表就可能会引起很多表序列需要更新成主键最大值+ 1才能保证不报错
(可以用把源库的SEQUENCE同步过来①或者如下存储解决② ))
理论上ORACLE序列,除了START值外任何参数都可以修改
当然最常用的就是先减去xx,然后增加
ALTER SEQUENCE SEQ INCREMENT -500;
SELECT SEQ.NEXTVAL FROM DUAL; --会得到0
ALTER SEQUENCE SEQ INCREMENT BY 1
还是DB2劲,可以直接修改
ALTER SEQUENCE SEQ RESTART WITH 5
Oracle 序列(Sequence)主要用于生成流水号,Oracle EBS系统中是经常用到的。但是,有时需要修改序列初始值(START WITH)时,好多人凭感觉认为:Alter Sequence SequenceName Start With N。事实上,在Oracle Db中,修改序列没有这样的语法。没有这样的语法情况怎么办,有二种方法可以完成
1.先删除序列,然后重新创建。不过这不是当前要讲的重点。这个方法比较方便。
2.通过Increment By来实现修改初始值。
例如:若序列名称是SeqTest2010_S,初始值是13,而现在要设置初始值为1020,Increment By值为:1007(1020-13)
2.1 执行:Alter Sequence SeqTest2010_S Increment By 1007;
2.2 执行:Select SeqTest2010_S.NextVal From Dual;
2.3 执行:Alter Sequence SeqTest2010_S Increment By 1;
修改完成。简单吧
不可以直接修改的,但是可以间接修改。
alter sequence se_1 increment by -2;
修改步进的值,然后查询一次,
select seq.nextval from dual;
然后再把步进修改回去,
alter sequence se_1 increment by 1;
相当于修改了序列的当前值。