Sequence+Trigger实现Oracle列自增

序列的语法格式为:

CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE/MINVALUE n|NOMAXVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n|NOCACHE}];

INCREMENT BY

用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的。

START WITH

定义Oracle序列的初始值(即产生的第一个值),默认为1。

MAXVALUE

定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。

MINVALUE

定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,

CYCLE和NOCYCLE

表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。

CACHE

(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。

例子:

创建测试表

---创建测试表
CREATE TABLE departments (
ID NUMBER (10) NOT NULL,
DESCRIPTION VARCHAR2 (50) NOT NULL
);
--添加主键
ALTER TABLE departments ADD (CONSTRAINT dept_pk PRIMARY KEY (ID));

创建序列

--创建序列
CREATE SEQUENCE dept_seq;

等同于

CREATE SEQUENCE dept_seq MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE NOPARTITION

触发器版本1:非空时,才使用序列的NEXTVAL值

CREATE OR REPLACE TRIGGER dept_before_insert 
BEFORE INSERT ON departments 
FOR EACH ROW
WHEN (NEW.ID IS NULL)
BEGIN
SELECT dept_seq.NEXTVAL INTO :NEW.ID FROM dual ;
END ;

触发器版本2: 无视插入数据时,指定的ID

CREATE OR REPLACE TRIGGER dept_before_insert
BEFORE INSERT ON departments
FOR EACH ROW
BEGIN
SELECT dept_seq.NEXTVAL INTO :new.id FROM dual;
END;

测试数据

INSERT INTO DEPARTMENTS (ID, DESCRIPTION) VALUES (TEST_USER.DEPT_SEQ.NEXTVAL, '指定ID');
INSERT INTO DEPARTMENTS (DESCRIPTION) VALUES ('不指定ID');

oracle列自增实现(1)-Sequence+Trigger实现Oracle列自增的更多相关文章

  1. Oracle列自增实现(2)-Identity Columns in Oracle Database 12c Release 1 (12.1)

    Oracle列自增-Identity Columns in Oracle Database 12c Release 1 (12.1) 在ORACLE 12C以前的版本中,如果要实现列自增长,需要通过序 ...

  2. An Example of On-Error Trigger in Oracle Forms

    I wrote this trigger around 4 years ago to handle errors in an application based on Oracle Forms 6i. ...

  3. Pre-Query trigger in Oracle D2k / Oracle Forms

    Pre-Query trigger in Oracle D2k / Oracle Forms DescriptionFires during Execute Query or Count Query ...

  4. Using Post-Form Trigger In Oracle Forms

    Post-Form trigger in Oracle Forms fires during the Leave the Form process, when a form is exited.   ...

  5. Using Pre-Form Trigger In Oracle Forms

    Pre-Form trigger in Oracle Forms fires during the form start-up, before forms navigates to the first ...

  6. ORACLE在表中添加的目光凝视和读取列

    在ORACLE中给表.列添加凝视以及读取凝视 1.给表填加凝视:SQL>comment on table 表名 is '表凝视"; 2.给列加凝视:SQL>comment on ...

  7. Learn How To Create Trigger In Oracle Forms

    I have written many posts related to triggers in Oracle Forms, I have given examples for Form Level ...

  8. oracle: jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 无效的列类型: 1111

    https://www.cnblogs.com/mmlw/p/5808072.html org.mybatis.spring.MyBatisSystemException: nested except ...

  9. oracle ogg 单实例双向复制搭建(oracle-oracle)--Oracle GoldenGate

    oracle ogg 单实例双向复制搭建(oracle-oracle)--Oracle GoldenGate --继昨天的测试,这一篇实施单实例双向复制(完全重新搭建) --环境不变 db1,db2( ...

随机推荐

  1. Android之一种很有趣的界面跳动提示动画

    上一个效果图: ==================================== 先上布局: <RelativeLayout xmlns:android="http://sch ...

  2. Fragment中生命周期函数的介绍

    1)第一次启动:onCreate->onAttach->onCreate->onCreateView->onActivityCreated->onStart->on ...

  3. Eclipse 汉化的和修改字体的方法

    先进入 http://www.eclipse.org/babel/downloads.php 找到自己对应版本的网址,然后复制下来. 然后,进入eclipse.点工具栏上的Help - Install ...

  4. Java命令学习系列(五)——jhat

    jhat(Java Heap Analysis Tool),是一个用来分析java的堆情况的命令.之前的文章讲到过,使用jmap可以生成Java堆的Dump文件.生成dump文件之后就可以用jhat命 ...

  5. shell单引号与变量、双引号与变量、如何在多重引号里面取到shell变量的值?

    如何在多重引号里面取到shell变量的值? 双引号是不会屏蔽对变量和某些特殊符号的转义的,而单引号里的所有内容都会原封不动的输出,而单引号里再用单引号将变量引起来,变量就又可以正常的显示,有点像数学里 ...

  6. Leap Motion 上手体验

    很早之前就关注了Leap Motion这个颠覆性的体感操作设备,如今7月22日上市至今已经一个月左右,淘宝的价格也已经降到650元,虽说相对国外还是偏贵,但是已经忍不住尝尝鲜了. Leap Motio ...

  7. JavaScript:Number 对象

    ylbtech-JavaScript:Number 对象 1. Number 对象返回顶部 Number 对象 Number 对象是原始数值的包装对象. 创建 Number 对象的语法: var my ...

  8. chain33 区块链开发框架诞生记

    chain33 诞生记 很多年没有写博客了,应该说,自从2013年开始玩比特币,就没有写过了.这5年来,做了很多事情,也见了很多以前做梦都没有想到过都事情.我做的最开心的事情,也是觉得最有意义的事情, ...

  9. GIST特征描述符使用

    来源:http://www.cnblogs.com/justany/archive/2012/12/06/2804211.html 一种场景特征描述 场景特征描述? 通常的特征描述符都是对图片的局部特 ...

  10. 从头认识java-18.2 主要的线程机制(4)-优先级

    这一章节我们来讨论一下多线程的优先级问题. 1.样例: package com.ray.ch17; public class Test { public static void main(String ...