oracle自增序列
1.创建表TABLESPACETEST
-- Create table
create table TABLESPACETEST
(contract_no VARCHAR2(100) primary key,contract_start_dt DATE,contract_end_dt DATE,loan_amt NUMBER(20,6),loan_bal NUMBER(20,6)
)
tablespace SYSTEM;
2.创建自增序列:
create sequence SEQ_TABLESPACETEST_con minvalue 1 maxvalue 999999 increment by 1 start with 1;
摘自百度文库:
创建序列需要CREATE SEQUENCE系统权限。序列的创建语法如下:
CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE/ MINVALUE n| NOMAXVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n| NOCACHE}];
其中:
1) INCREMENT BY⽤于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。
2) START WITH 定义序列的初始值(即产⽣的第⼀个值),默认为1。
3) MAXVALUE 定义序列⽣成器能产⽣的最⼤值。选项NOMAXVALUE是默认选项,代表没有最⼤值定义,这时对于递增Oracle序列,系统
能够产⽣的最⼤值是10的27次⽅;对于递减序列,最⼤值是-1。
4) MINVALUE定义序列⽣成器能产⽣的最⼩值。选项NOMAXVALUE是默认选项,代表没有最⼩值定义,这时对于递减序列,系统能够产
⽣的最⼩值是?10的26次⽅;对于递增序列,最⼩值是1。
5) CYCLE和NOCYCLE 表⽰当序列⽣成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增
序列达到最⼤值时,循环到最⼩值;对于递减序列达到最⼩值时,循环到最⼤值。如果不循环,达到限制值后,继续产⽣新值就会发⽣错误。
6) CACHE(缓冲)定义存放序列的内存块的⼤⼩,默认为20。NOCACHE表⽰不对序列进⾏内存缓冲。对序列进⾏内存缓冲,可以改善序列
的性能。
⼤量语句发⽣请求,申请序列时,为了避免序列在运⽤层实现序列⽽引起的性能瓶颈。Oracle序列允许将序列提前⽣成 cache x个先存⼊内
存,在发⽣⼤量申请序列语句时,可直接到运⾏最快的内存中去得到序列。但cache个数也不能设置太⼤,因为在数据库重启时,会清空内
存信息,预存在内存中的序列会丢失,当数据库再次启动后,序列从上次内存中最⼤的序列号+1 开始存⼊cache x个。这种情况也能会在数
据库关闭时也会导致序号不连续。
7) NEXTVAL 返回序列中下⼀个有效的值,任何⽤户都可以引⽤。
8) CURRVAL 中存放序列的当前值,NEXTVAL 应在 CURRVAL 之前指定,⼆者应同时有效。
--------------------------------------------------------
作者:天神太院明骞骞010
链接:https://wenku.baidu.com/view/13bc00f4270c844769eae009581b6bd97e19bc50.html
来源:百度文库
3.创建触发器:(注解来源于网络)
create trigger TRIG_TABLESPACETEST_con
before insert on TABLESPACETEST /*触发条件:当表TABLESPACETEST执行插入操作时触发此触发器*/ for each row /*对每一行都检测是否触发*/
begin
/*触发后执行的动作,在此是取得序列SEQ_SEQ_TABLESPACETEST_con的下一个值插入到表BC_ES_IK_HOT_WORD中的id字段中*/
select SEQ_TABLESPACETEST_con.nextval into :new.CONTRACT_NO from dual;
end;
4.插入2条新数据
contract_no实现自增长,for update,insert语句都可以,只需要新增非contract_no字段内容即可。
结果:
5.测试根据不同情况序列变化
(1)测试删除其中一条再新增一条
delete TABLESPACETEST where contract_no=2;
commit;
insert into TABLESPACETEST (CONTRACT_START_DT,CONTRACT_END_DT,LOAN_AMT,LOAN_BAL)
values(TO_date('2022/01/01','YYYY/MM/DD'),TO_date('2022/12/01','YYYY/MM/DD'),'80000','80000');
insert into TABLESPACETEST (CONTRACT_START_DT,CONTRACT_END_DT,LOAN_AMT,LOAN_BAL)
values(TO_date('2022/01/01','YYYY/MM/DD'),TO_date('2022/12/01','YYYY/MM/DD'),'80000','80000');
commit;
查询表数据:
结果:
发现序列自己增长到了21,不是想象中的3。经过分析发现序列经过查询每次也会自增
select SEQ_TABLESPACETEST_con.nextval from dual
查询出当前序列值是23,所以再次插入一条数据显示24,然后查询上述SELECT语句,查询5次后,序列值为29,再次插入一条数据,数据contract_no显示为30 。所以查询序列也会造成序列自增长。
(2)插入一条带固定值CONTRACT_NO的数据
insert into TABLESPACETEST (CONTRACT_NO,CONTRACT_START_DT,CONTRACT_END_DT,LOAN_AMT,LOAN_BAL)
values('44',TO_date('2022/01/01','YYYY/MM/DD'),TO_date('2022/12/01','YYYY/MM/DD'),'70000','60000');
commit;
结果:
自定义字段还是按照序列的下一个值显示,固定值无效。等价于
insert into TABLESPACETEST (CONTRACT_START_DT,CONTRACT_END_DT,LOAN_AMT,LOAN_BAL)
values(TO_date('2022/01/01','YYYY/MM/DD'),TO_date('2022/12/01','YYYY/MM/DD'),'70000','60000');insert into TABLESPACETEST (CONTRACT_NO,CONTRACT_START_DT,CONTRACT_END_DT,LOAN_AMT,LOAN_BAL)
values(SEQ_TABLESPACETEST_con.nextval,TO_date('2022/01/01','YYYY/MM/DD'),TO_date('2022/12/01','YYYY/MM/DD'),'70000','60000');
(3)修改序列的极限值
alter sequence SEQ_TABLESPACETEST_con maxvalue 50
查询配置用户信息 确认修改成功:
select * from USER_SEQUENCES where SEQUENCE_NAME='SEQ_TABLESPACETEST_CON';
结果:
表结构注释:
sequence_name:SEQUENCE name序列名称
min_value:序列的最小值
max_value:序列的最大值
increment_by:序列递增的值
cycle_flag:序列是否在达到极限时结束?
order_flag:序列号是按顺序生成的吗?
cache_size:要缓存的序列号数(最小设置为2)
last_number:写入磁盘的最后序列号
(4)测试查询是的序列值超过50,则ORACLE会报错
oracle自增序列相关推荐
- springboot+mybatis-plus实现oracle自增序列
第一种方法: 1.注入bean keyGenerator(使用@Bean(name="keyGenerator_")是防止微服务架构时bean冲突) @Bean(name=&quo ...
- oracle增加字段为主键自增_oracle 自增序列实现 可作为主键
好记性不如烂笔头 记录如何建立oracle 自增序列 表结构 create table TAB_USERINPUT ( RID VARCHAR2(20) not null, VARID VARCHAR ...
- NHibernate 与Oracle 点滴
以下是我在使用NHibernate过程中遇到的一些小问题,记录下来,权当笔记吧! 1.自增序列与严格类型匹配 在使用Oracle数据库的自增主键时,hbm.xml配置文件中generator ...
- 怎样给oracle表设置序列,Oracle的sequence序列在hibernate中的配置方法
Oracle自增序列在Hibernate中的配置方法 在很多情况下,我们使用Hibernate在已经建立好数据库的基础上.在oracle中,如果已经建立好的数据库中使用了sequence,则可以按照下 ...
- oracle 数据库自增
有的时候,我们在创建oracle 自增序列时,会报错.这个时候不用慌,表创建完了就不用管了.然后我们可以根据下面的教程中的第二步,第三步,来创建序列. -- 第一步创建表 create table t ...
- CYQ.Data 轻量数据层之路 V2.0 震撼惊世 支持多数据库/内置Aop(二十五)
所有文章索引:CYQ.Data 轻量数据层之路 框架开源系列 索引 前言: 从V1.5发布到现在时隔20天了,终于发布2.0版本了,2.0系列版本由于引入多数据库支持,内部结构改动较大. 但是外面调用 ...
- Sharding-JDBC 实战(史上最全)
文章很长,而且持续更新,建议收藏起来,慢慢读! Java 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 免费赠送 经典图书 : 极致经典 + 社群大片好评 < Java 高 ...
- 个人小项目——飞聊通讯录V1.0小结
设计一个简单的通讯录,实现管理员对通讯录的管理,包括添加一条通讯记录,根据id修改对应的记录信息,根据id删除一条记录,根据id显示一条记录的详细信息.每个页面都要有命令提示信息. 具体要求 1. 系 ...
- mysql添加序列触发器_在Oracle中创建自增序列之触发器
下面是对Oracle表中一个字段建立自增序列的例子与说明,希望对大家有所帮助. 下面是对Oracle表中一个字段建立自增序列的例子与说明,,希望对大家有所帮助. /*================= ...
- 如何实现 Oracle 的自增序列,两步轻松搞定
在实际项目开发过程中,设计数据库表时经常遇到需要主键自增的场景.那如何实现Oracle的主键自增呢,这里我们记录一种最常用的方式:sequence + trigger. 就是利用Oralce的序号和触 ...
最新文章
- Spring Boot 2.0 热部署指南
- python3 bytes和bytearray总结
- 尚硅谷图解Java数据结构和算法一
- openstack简易汉化
- 九度 1545:奇怪的连通图
- php留言板实战,PHP留言本,非常适合新手实战操作!
- JavaScript对象相关及json总结(附实例)
- 一款盲盒的交友软件叫什么(微信恋爱脱单交友盲盒小程序制作开发介绍)
- 微信H5支付功能开发
- coreldraw快速撤回_CorelDRAW快捷键:常用快捷键(1)
- 统计学基础知识梳理(一)
- python开发移动app_手机python开发
- github中文显示乱码的解决方法
- 2021年下半年软件设计师上午真题答案及解析(三)
- matlab 怎么打开.p文件,matlab p文件肿么打开 或者 运行
- c#模拟看板控件_C#TIPTOP电子看板
- linux网易云音乐安装失败需要×××依赖
- 网络运维基础知识手册
- 布拉格天空飞过荆棘鸟
- 常用数据库的特点、应用场景信息整理
热门文章
- word转03版本公式变成图片_word2013公式编辑器_Word 2013保存的时候突然发现公式变成图片怎么办?_word文档打字的时候...
- 同步练习(Java SE(九))补充
- 孤独最高境界:这款单人VR游戏竟能带来多人组队体验
- UVALive 7345 J - The Hypnotic Spirals
- golang 实现微信聊天机器人
- ios根号怎么打_ios计算器开根号 苹果手机计算器怎么开根号 详情介绍
- 游戏,CG音乐音效配音
- 基于大数据的一线城市住房租赁影响因素分析
- 使用Flash地图控件AnyMap创建Dashboard Drilldown Maps
- MATLBA官方给出的2D Allen-Cahn Matlab代码分析