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自增序列相关推荐

  1. springboot+mybatis-plus实现oracle自增序列

    第一种方法: 1.注入bean keyGenerator(使用@Bean(name="keyGenerator_")是防止微服务架构时bean冲突) @Bean(name=&quo ...

  2. oracle增加字段为主键自增_oracle 自增序列实现 可作为主键

    好记性不如烂笔头 记录如何建立oracle 自增序列 表结构 create table TAB_USERINPUT ( RID VARCHAR2(20) not null, VARID VARCHAR ...

  3. NHibernate 与Oracle 点滴

    以下是我在使用NHibernate过程中遇到的一些小问题,记录下来,权当笔记吧! 1.自增序列与严格类型匹配     在使用Oracle数据库的自增主键时,hbm.xml配置文件中generator ...

  4. 怎样给oracle表设置序列,Oracle的sequence序列在hibernate中的配置方法

    Oracle自增序列在Hibernate中的配置方法 在很多情况下,我们使用Hibernate在已经建立好数据库的基础上.在oracle中,如果已经建立好的数据库中使用了sequence,则可以按照下 ...

  5. oracle 数据库自增

    有的时候,我们在创建oracle 自增序列时,会报错.这个时候不用慌,表创建完了就不用管了.然后我们可以根据下面的教程中的第二步,第三步,来创建序列. -- 第一步创建表 create table t ...

  6. CYQ.Data 轻量数据层之路 V2.0 震撼惊世 支持多数据库/内置Aop(二十五)

    所有文章索引:CYQ.Data 轻量数据层之路 框架开源系列 索引 前言: 从V1.5发布到现在时隔20天了,终于发布2.0版本了,2.0系列版本由于引入多数据库支持,内部结构改动较大. 但是外面调用 ...

  7. Sharding-JDBC 实战(史上最全)

    文章很长,而且持续更新,建议收藏起来,慢慢读! Java 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 免费赠送 经典图书 : 极致经典 + 社群大片好评 < Java 高 ...

  8. 个人小项目——飞聊通讯录V1.0小结

    设计一个简单的通讯录,实现管理员对通讯录的管理,包括添加一条通讯记录,根据id修改对应的记录信息,根据id删除一条记录,根据id显示一条记录的详细信息.每个页面都要有命令提示信息. 具体要求 1. 系 ...

  9. mysql添加序列触发器_在Oracle中创建自增序列之触发器

    下面是对Oracle表中一个字段建立自增序列的例子与说明,希望对大家有所帮助. 下面是对Oracle表中一个字段建立自增序列的例子与说明,,希望对大家有所帮助. /*================= ...

  10. 如何实现 Oracle 的自增序列,两步轻松搞定

    在实际项目开发过程中,设计数据库表时经常遇到需要主键自增的场景.那如何实现Oracle的主键自增呢,这里我们记录一种最常用的方式:sequence + trigger. 就是利用Oralce的序号和触 ...

最新文章

  1. Spring Boot 2.0 热部署指南
  2. python3 bytes和bytearray总结
  3. 尚硅谷图解Java数据结构和算法一
  4. openstack简易汉化
  5. 九度 1545:奇怪的连通图
  6. php留言板实战,PHP留言本,非常适合新手实战操作!
  7. JavaScript对象相关及json总结(附实例)
  8. 一款盲盒的交友软件叫什么(微信恋爱脱单交友盲盒小程序制作开发介绍)
  9. 微信H5支付功能开发
  10. coreldraw快速撤回_CorelDRAW快捷键:常用快捷键(1)
  11. 统计学基础知识梳理(一)
  12. python开发移动app_手机python开发
  13. github中文显示乱码的解决方法
  14. 2021年下半年软件设计师上午真题答案及解析(三)
  15. matlab 怎么打开.p文件,matlab p文件肿么打开 或者 运行
  16. c#模拟看板控件_C#TIPTOP电子看板
  17. linux网易云音乐安装失败需要×××依赖
  18. 网络运维基础知识手册
  19. 布拉格天空飞过荆棘鸟
  20. 常用数据库的特点、应用场景信息整理

热门文章

  1. word转03版本公式变成图片_word2013公式编辑器_Word 2013保存的时候突然发现公式变成图片怎么办?_word文档打字的时候...
  2. 同步练习(Java SE(九))补充
  3. 孤独最高境界:这款单人VR游戏竟能带来多人组队体验
  4. UVALive 7345 J - The Hypnotic Spirals
  5. golang 实现微信聊天机器人
  6. ios根号怎么打_ios计算器开根号 苹果手机计算器怎么开根号 详情介绍
  7. 游戏,CG音乐音效配音
  8. 基于大数据的一线城市住房租赁影响因素分析
  9. 使用Flash地图控件AnyMap创建Dashboard Drilldown Maps
  10. MATLBA官方给出的2D Allen-Cahn Matlab代码分析