oracle创建自增序列
Oracle中,当需要建立一个自增字段时,需要用到sequence。sequence也可以在mysql中使用,但是有些差别,日后再补充,先把oracle中sequence的基本使用总结一下,方便日后查阅。
在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。
1. Create Sequence
首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限。
创建语句如下:
CREATE SEQUENCE seqTest
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
说明:
minvalue:序列最小值
maxvalue/nomaxvalue:序列最大值/没有最大值
start with 1:序列从1开始
increment by 1:每次增加1
cache/nocache:nocache不缓存。cache缓存。开启缓存,效率高,只是如果数据库宕机了,缓存丢失,会出现序列跳号情况。
2.查看已有sequence:
select * from user_sequences;
Select * from all_sequences;
3.得到Sequence值
两种方式
① select last_number from user_sequences where sequence_name='SEQ_ON_USER';
② select SEQ_ON_USER.nextval from sys.dual;
定义好sequence后,你就可以用currVal,nextVal取得值。
CurrVal:返回 sequence的当前值
NextVal:增加sequence的值,然后返回 增加后sequence值
得到值语句如下:
SELECT Sequence名称.CurrVal FROM DUAL;
如得到上边创建Sequence值的语句为:
select seqtest.currval from dual
在Sql语句中可以使用sequence的地方:
- 不包含子查询、snapshot、VIEW的 SELECT 语句
- INSERT语句的子查询中
- INSERT语句的values中
- UPDATE 的 SET中
如在插入语句中
insert into 表名(id,name)values(seqtest.Nextval,'sequence 插入测试');
注:
- 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。
CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。
一次NEXTVAL会增加一次 SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。
- 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组 到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。
4.Alter Sequence
拥有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create。
例:
alter sequence SEQTEST maxvalue 9999999;
另: SEQUENCE_CACHE_ENTRIES参数,设置能同时被cache的sequence数目。
5.Drop Sequence
DROP SEQUENCE seqTest;
6. 一个例子
create sequence SEQ_ID
minvalue 1
maxvalue 99999999
start with 1
increment by 1
nocache
order;
建解发器代码为:
create or replace trigger tri_test_id
before insert on S_Depart --S_Depart 是表名
for each row
declare
nextid number;
begin
IF :new.DepartId IS NULLor :new.DepartId=0 THEN --DepartId是列名
select SEQ_ID.nextval --SEQ_ID正是刚才创建的
into nextid
from sys.dual;
:new.DepartId:=nextid;
end if;
end tri_test_id;
上面的代码就可以实现自动递增的功能了。
或者
- create or replace trigger "SEQ_ON_USER_GENERATOR" before
- insert on databasename1.T_USER for each row
- declare
- mid number,
- begin
- select SEQ_ON_USER.nextval into mid from dual;
- :new.id:=mid;
- end
- create trigger SEQ_ON_USER_Trigger
- before insert on T_USER for each row
- begin
- select SEQ_ON_USER.nextval into :new.id from dual;
- end SEQ_ON_USER_Trigger;
oracle创建自增序列相关推荐
- oracle创建自增序列并每日刷新
oracle创建自增序列并每日刷新重新从1开始 --创建增长序列CREATE SEQUENCE ID_SEQINCREMENT BY 1 START WITH 1MINVALUE 0 NOCYCLE ...
- oracle 创建自增序列
create sequence seq_sys_user minvalue 1 maxvalue 999999999999999999 start with 1 increment by 1 noca ...
- oracle修改seq为order,Oracle 创建和修改sequence
Oracle 创建和修改sequence 在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方. 1.Create Sequence 你首先要有 ...
- 如何实现 Oracle 的自增序列,两步轻松搞定
在实际项目开发过程中,设计数据库表时经常遇到需要主键自增的场景.那如何实现Oracle的主键自增呢,这里我们记录一种最常用的方式:sequence + trigger. 就是利用Oralce的序号和触 ...
- oracle 创建表定义主键,Oracle 学习----:创建表(主键自增)
一.创建表 create table testTable ( Id numbere, name varchar2(100), age number, createTime date, primary ...
- PostgreSQL:创建自增序列id,分区表,分区表子表
文章目录 1)创建自增序列seq 2)创建分区表主表 3)创建分区表子表 4)分区表数据插入 5)分区表查询 1)创建自增序列seq CREATE SEQUENCE if not exists pub ...
- oracle有一百个人围一圈报数,案例:Oracle创建表时报session超过最大值 ORA-00018 证明递归ses...
天萃荷净 创建表时报session超过最大值 证明递归session存在并不在v$session中显示 我们在数据库的使用过程中,有时候会遇到类似情况,我会话是登录的,但是我进行某种操作,缺报sess ...
- oracle创建数据库后干什么,手动创建Oracle数据库之前因后果
对于许多数据库管理员来说,Oracle究竟是不是一个难以管理和驾驭的怪兽级数据库,会不会让他们管理生涯饱受折磨?当看到其命令行界面时,很多人会问这么一个问题. 如果你想通过一个应用程序操控使用这个数据 ...
- oracle创建数据库总结,oracle创建数据库和用户方法总结
以前开发的时候用得比较多的是mysql和sql server,oracle用的比较少,用起来比较生疏,mysql和sql server用起来比较类似,就oracle的使用方式和他们不同,oracle在 ...
- oracle创建数据库、表空间、用户并授权
oracle创建数据库.表空间.用户并授权 在安装完Oracle数据库软件之后可以使用默认的数据库orcl,也可以根据需要创建自定义的数据库.表空间用于对数据库中的资源进行分类,每个用户都有默认的表空 ...
最新文章
- 开源sk-dist,超参数调优仅需3.4秒,sk-learn训练速度提升100倍
- python实现洗牌算法_洗牌算法及 random 中 shuffle 方法和 sample 方法浅析
- PostgreSQL — Overview
- 面试:说说你对 HashMap 的认识?
- [linux内核][LINUX内核编程]学习笔记(一)
- 计算机科学班(原acm班),计算机科学创新实验班(以下简称ACM班)培养计划.doc
- 任务和特权级保护(一)——《x86汇编语言:从实模式到保护模式》读书笔记27
- SAP CRM One Order框架里旧式的索引表设计原理
- 1.关于python
- Windows下rocketmq mqnamesrv.exe 启动成功,但是mqbroker.exe启动失败
- 服气!蹭热点无敌,麦当劳发布“5G”新品:真香
- Linux学习笔记---使用BusyBox创建根文件系统(一)
- 语义分割之VOC2012、Cityscapes数据集介绍
- 微软VC/MFC FAQ(转)
- MySQL 中while loop repeat 的基本用法
- MOSSE相关滤波算法学习笔记
- Linux下使用clang-format格式化C++代码
- 《Fundamentals of Computer Grahpics》虎书第三版翻译——第一章 介绍
- 强烈推荐 :最用心的运营数据指标解读
- centos7安装大数据平台
热门文章
- win10桌面背景为什么突然变黑了 win10桌面背景不显示解决方法
- 微信开发者工具测试方法
- Putty配色方案修改
- java se检查异常,JavaSE:异常(下)
- 编译报错【error】dexpreopt.sh:23 exited with status 1
- Arduino智能小车——小车测速
- 支付系统中,账户体系的设计与记账处理
- html表格边框线怎么加粗,CAD表格边框如何加粗?CAD表格边框加粗的方法
- cad一键卸载工具叫什么_CAD专用卸载修复工具,一键完全彻底卸载删除CAD软件的专用卸载工具...
- 记录:The field files exceeds its maximum permitted size of 1048576 bytes...解决方案【亲测有效】