文档章节

oracle列自增实现(1)-Sequence+Trigger实现Oracle列自增

小强斋太
 小强斋太
发布于 2016/11/09 20:06
字数 534
阅读 11
收藏 0
点赞 0
评论 0

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');

本文转载自:http://www.cnblogs.com/xqzt/p/4452292.html

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
Oracle 10G中关于序列使用详解.

Oracle 10G中关于序列使用详解. 数据库设计的三大范式第一条就是独立的表结构中必须有唯一主键来标识表中数据.在以往微软的SQL Server(duo版本)平台上.手动编码实现表中主键.并设定为自增列是...

猴子
2011/11/10
0
0
mybatis中mysql和oracle的区别

mysql和oracle语法有一定的差异,我们将服务由部署mysql的服务器迁移到部署oracle的服务器上时,需要修改sql语句。下面说说mybatis中由mysql转为oracle需要修改的语句。 1.批量插入mysql: ...

sietai
05/18
0
0
Oracle中的有序自增字段——序列sequence

序列是Oracle提供的用于产生一组等间隔整型数值的数据库对象,可以通过在插入语句中引用序列值来实现主键自增。 创建sequence: Oracle用CREATE SEQUENCE命令创建序列,格式如下: CREATE SEQ...

猴亮屏
2014/06/03
0
0
oracle中通过SEQUENCE和TRIGGER来实现自增列

一、创建表格 要自增的列数据类型是NUMBER,不能为LONG 二、创建序列(SEQUENCE) CREATE SEQUENCE s_id NOMAXVALUE NOCYCLE 三、创建触发器(TRIGGER) CREATE OR REPLACE TRIGGER BEFOREIN...

Bet
2013/03/24
0
0
在spring+ibatis中使用LAST_INSERT_ID()是否安全?

项目数据库要从oracle转为mysql。 为了获取插入数据的id,oracle中有sequence ,对mysql不是很熟悉,google得知一般都用自增字段去实现。 ibatis中这样写的: 关于LASTINSERTID()看到文档提到...

still_waiting
2013/08/05
523
1
跨数据库分页及DDL工具--jDialects

jDialects 开源协议: LGPL 2.1 jDialects是一个从Hibernate中提取的支持70多种数据库(并加入了SQLite、Access等)方言的小项目,主要功能有: 1.创建跨数据库的分页SQL,根据当前方言生成当前数...

yong9981
2017/04/25
1K
2
mybatis+mysql返回自增长主键的二种方式

一、第一种方式 INSERT INTO users (username,password,nickname,token,regtime,logintime) VALUES (#{username},#{password},#{nickname},#{token},#{regTime},#{loginTime}) u......

xtceetg
2017/08/19
0
0
Oracle开发的几个解决方案-自增序列

新项目需要用Oracle 数据库,之前到用过好几个数据库,就是没有用过Oracle,总觉得在互联网方面的开发,选用Oracle太过重量级,这次也是客户要求。 这里整理些非常基础的开发技巧。高手绕道 ...

从前
2013/12/27
0
0
Oracle序列应用举例

序列是用来生成唯一、连续的整数的数据库对象。序列通常用来自动生成主键或唯一键的值。本篇文章的主题是通过创建Oracle序列和触发器实现表的主键自增。 1. 创建序列 Oracle序列的语法格式为...

博为峰教研组
2016/10/28
2
0
在jfinal实现oracle”自增主键“保存入库,并获取自生成的主键

oracle数据库其实是没有自增主键的,但为了达到这一效果 ,可以采取以下方式间接实现: 1、利用sequence自动力产生一个主键 ,然后将该值设置到主键上,并保存入库具体代码如下: insert int...

真的农夫三拳
2012/08/19
0
6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

springboot常用注解

@SpringBootApplication: 包含@Configuration、@EnableAutoConfiguration、@ComponentScan 通常用在主类上。 @Service: 用于标注业务层组件。 @RestController: 用于标注控制层组件(如strut...

GoldenVein
12分钟前
0
0
梯度下降法求多元线性回归及Java实现

对于数据分析而言,我们总是极力找数学模型来描述数据发生的规律, 有的数据我们在二维空间就可以描述,有的数据则需要映射到更高维的空间。数据表现出来的分布可能是完全离散的,也可能是聚...

冷血狂魔
17分钟前
2
0
如何进行大数据的入门级学习?

不知道你是计算机专业应届生还是已经从业者。总之,有java基础的学生学习大数据会轻松很多,零基础的小白都需要从java和linux学起。 如果你是一个学习能力特别强,而且自律性也很强的人的话可...

董黎明
26分钟前
0
0
使用Parcelable传递复杂参数

最近做AIDL传递对象,对象必须实现Parcelable的方法才可以被传递。 @Override    public int describeContents() {//这个 默认返回0就行了。        return 0;    }    ...

火云
27分钟前
0
0
十大Intellij IDEA快捷键

Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论。每个人都有自己的最爱,想排出个理想的榜单还真是困难。以前也整理过Intellij的快捷键,这次就按照我日常开发...

HJCui
37分钟前
0
0
word 使用mathtype 编写 数学公式

下载安装,这个链接命名。。。。 http://www.mathtype.cn/xiazai.html 安装之后会多出一个选项 使用内联方式插入图表 编写公式的界面 设置支持latex 语法 输入公式回车就可以看到结果...

阿豪boy
55分钟前
0
0
Promise

定义 Promise是异步编程的一种解决方案,所谓Promise就是一个容器,里面保存着某个未来才会结束的事件(通常是一个一步操作)的结果。 特点: 2.1 对象的状态不受外界影响,三种状态pending...

litCabbage
今天
1
0
设计模式:适配器模式

说明:在不改变旧接口代码的前提下,为该接口新增其他接口的功能 适配器模式可以分为:类适配器模式、对象适配器模式、接口适配器模式 前两种模式下,我会以播放器为例。老版的播放器(Playe...

人觉非常君
今天
0
0
使用VsCode搭建Java开发环境,创建springboot应用

1、在 Visual Studio Code 中打开扩展视图(Ctrl+Shift+X),输入关键词java、spring分别下载Java开发插件包和springboot插件包 2、配置参数 点击设置按钮,进入设置选项,配置用户设置 在用户...

qsyan
今天
24
0
调教属于你的“贾维斯”(给自己挖了一个很大的坑)

今天玩一下现在很火的人工智能。 废话不多说,先来看几张图: 看出什么蹊跷了吗? 再来看一个视频: https://www.zhihu.com/video/1002567561061511168 (演示网址和代码见文末) 人工智能离...

crossin
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部