在Oracle中实现自增加ID的功能
我们经常在设计数据库的时候用一个系统自动分配的ID来作为我们的主键,在SQL SERVER 中有系统自带的ID自增功能,但是在ORACLE中没有这样的功能,我们可以通过采取以下方法实现自动增加ID的功能
在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
1、CreateSequence
你首先要有CREATESEQUENCE或者CREATEANYSEQUENCE权限,
CREATESEQUENCEemp_sequence
INCREMENTBY1--每次加几个
STARTWITH1--从1开始计数
NOMAXVALUE--不设置最大值
NOCYCLE--一直累加,不循环
CACHE10;
一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回sequence的当前值
NEXTVAL=增加sequence的值,然后返回sequence值
比如:
emp_sequence.CURRVAL
emp_sequence.NEXTVAL
可以使用sequence的地方:
-不包含子查询、snapshot、VIEW的SELECT语句
-INSERT语句的子查询中
-NSERT语句的VALUES中
-UPDATE的SET中
可以看如下例子:
INSERTINTOempVALUES
(empseq.nextval,'LEWIS','CLERK',7902,SYSDATE,1200,NULL,20);
SELECTempseq.currvalFROMDUAL;
但是要注意的是:
-第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENTBY值,然后返回增加后的值。CURRVAL总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白?
-如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。使用cache或许会跳号,比如数据库突然不正常down掉(shutdownabort),cache中的sequence就会丢失.所以可以在createsequence的时候用nocache防止这种情况。
2、AlterSequence
你或者是该sequence的owner,或者有ALTERANYSEQUENCE权限才能改动sequence.可以alter除start至以外的所有sequence参数.如果想要改变start值,必须dropsequence再re-create.
Altersequence的例子
ALTERSEQUENCEemp_sequence
INCREMENTBY10
MAXVALUE10000
CYCLE--到10000后从头开始
NOCACHE;
影响Sequence的初始化参数:
SEQUENCE_CACHE_ENTRIES=设置能同时被cache的sequence数目。
可以很简单的DropSequence
DROPSEQUENCEorder_seq;
好吧,就到这里。
-------------------------------------------------------------
自增长及触发器:
如何在Oracle中实现类似自动增加ID的功能?
整理编辑:ChinaASP
我们经常在设计数据库的时候用一个系统自动分配的ID来作为我们的主键,但是在ORACLE中没有这样的
功能,我们可以通过采取以下的功能实现自动增加ID的功能
1.首先创建sequence
createsequenceseqmaxincrementby1
2.使用方法
selectseqmax.nextvalIDfromdual
就得到了一个ID
如果把这个语句放在触发器中,就可以实现和mssql的自动增加ID相同的功能!
-------------------------------------------------------------------------
由macro发布于:2001-04-1314:44
作者:MacroZeng
###建表###
CREATETABLE"SPORTS"."LINEUP"("ID"NUMBERNOTNULL,"TYPE"
NUMBER(3)NOTNULL,"BODY"VARCHAR2(100)NOTNULL,"HITS"NUMBER(
10)DEFAULT0NOTNULL,PRIMARYKEY("ID"))
TABLESPACE"TS_SPORTS"
###建序列###
CREATESEQUENCE"SPORTS"."SPORTS_LINEUP_ID_SEQ"INCREMENTBY1
STARTWITH1MAXVALUE1.0E28MINVALUE1NOCYCLE
CACHE50NOORDER
###建自动更新的触发器###
CREATEORREPLACETRIGGER"SPORTS"."SPORTS_LINEUP_ID_TRIGGER"
BEFOREINSERT
ON"SPORTS"."LINEUP"
FOREACHROW
DECLARE
next_idNUMBER;
BEGIN
--Getthenextidnumberfromthesequence
SELECTsports_lineup_id_seq.NEXTVAL
INTOnext_id
FROMdual;
--Usethesequencenumberastheprimarykey
--fortherecordbeinginserted.
:new.id:=next_id;
END;
###建保护PRIMARYKEY的触发器###
CREATEORREPLACETRIGGER"SPORTS"."LINEUP_ID_UPDATE_TRIGGER"
BEFOREUPDATEOF"ID"ON"SPORTS"."LINEUP"
FOREACHROW
BEGIN
RAISE_APPLICATION_ERROR(-20000,
'sports_lineup_id_update_trigger:UpdatesoftheIDfield'
||'arenotallowed.');
END;
转载于:https://www.cnblogs.com/linpengfeixgu/articles/1595710.html
在Oracle中实现自增加ID的功能相关推荐
- oracle中sql查询增加自增序列号
如果我们需要在oracle中查询一系列数据,但是需要对查询出来的数据有一个自增的序列号,方便后续的处理的话,我们可以利用rownum 比如有table A 我们可以这么写sql select a.*, ...
- oracle中forall in,oracle10g的forall功能加强
oracle10g的forall功能加强[@more@]In Oracle Database 10g, PL/SQL now offers two new clauses in the FORALL ...
- oracle如何获取自增id,oracle实现自增id
--oracle实现自增id --创建一张T_StudentInfo表 create table T_StudentInfo ( "id" integer not null pri ...
- oracle增加字段为主键自增_在 Oracle 中设置自增列
如果你经常使用 MySQL,你肯定对 AUTO_INCREMENT 非常熟悉,因为经常要用到它. 一.什么是自增列 ? 自增列是数据库中值随插入的每个行自动增加的一列.它最常用于主键或 ID 字段,这 ...
- oracle主机自增,Oracle中实现ID自增
一.自增列 自增列是数据库中值随插入的每个行自动增加的一列.它最常用于主键或 ID 字段,这样每次增加一行时,不用指该字段的值,它就会自动增加,而且是唯一的. 当在 MySQL 中定义列时,我们可以指 ...
- Metalink Note:中文文档列表 - Oracle EBS (Enterprise Business Suite) [ID 1553829.1]
Oracle中国的技术支持团队正在把一些常见Oracle EBS的Metalink Notes翻译成中文,这肯定会大大提升用户的使用体验,毕竟还是绝大多数用户,技术人员还是习惯阅读中文的技术文档. 大 ...
- Oracle中对现有表增加列
altertable Tablename add(column1 varchar2(20),column2 number(7,2)...) --Oracle中修改列名不可以,但是可以删除列,增加列 a ...
- Oracle查询所有序列;[oracle中如何创建表的自增ID(通过序列);oracle sql语句大全
Oracle查询所有序列 oracle sql语句大全 oracle中如何创建表的自增ID(通过序列)
- oracle表中增加字段 sql语句,ORACLE中通过SQL语句(alter table)来增加、删除、修改字段...
1.添加字段: alter table 表名 add (字段 字段类型) [ default '输入默认值'] [null/not null] ; 2.添加备注: comment on ...
最新文章
- Python发展迅猛,如何在Python热中脱颖而出了?
- MyBatis01 Idea中搭建MyBatis开发环境
- 水晶报表使用经验谈1--建立水晶报表第一步及编译最易出现错误的解决方法及报表转换成pdf文档进行打印方法...
- SAP 电商云 Spartacus UI Angular Component 动态创建的单步调试
- 如何免费申请并使用SAP Marketing Cloud测试系统
- python学习-日志(logging的定义、参数、format、示例代码、创建logging对象、设置Handler)
- c语言memcopy_C语言中memcpy 函数的用法详解
- Java——IO流(序列流)
- Jupyter notebook应用总结
- Java集合框架-重构设计
- 浅谈C++中内存泄漏的检测
- Verilog作业(一)
- Python:***测试开源项目
- 深入浅出通信原理MIMO合集
- macOS BigSur下根目录下无法创建文件
- 输出100以内的质数
- Word的”交叉引用“和”插入题注“快捷键设置
- Power BI(十九)power pivot之常用筛选器函数
- 新存储、新格局、新飞跃,浪潮存储应时而来
- matlab 读取ENVI中*.img格式图片代码
热门文章
- 剑指Offer(Java实现)按之字形顺序打印二叉树
- opencv matlab测距,基于MATLAB和OpenCV的双目视觉测距系统的实现
- 【正一专栏】再见小马哥——永记你含着泪的笑
- 外企面试--基本涵盖了所有问题
- Fiddler 技术篇-捕捉https协议设置,抓取百度https实例演示
- JDK1.8的安装与环境变量设置演示,java、jre安装及配置
- VS Code(Visual Studio Code)编辑器的常用设置
- C# 学习笔记(19)操作SQL Server下
- C# 学习笔记(12)hex文件转bin文件小工具
- CTFshow 命令执行 web51