我们经常在设计数据库的时候用一个系统自动分配的ID来作为我们的主键,在SQL SERVER 中有系统自带的ID自增功能,但是在ORACLE中没有这样的功能,我们可以通过采取以下方法实现自动增加ID的功能

在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
1、CreateSequence
你首先要有CREATESEQUENCE或者CREATEANYSEQUENCE权限,
CREATESEQUENCEemp_sequence
INCREMENTBY1--每次加几个
STARTWITH1--从1开始计数
NOMAXVALUE--不设置最大值
NOCYCLE--一直累加,不循环
CACHE10;

一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回sequence的当前值
NEXTVAL=增加sequence的值,然后返回sequence值
比如:
emp_sequence.CURRVAL
emp_sequence.NEXTVAL

可以使用sequence的地方:
-不包含子查询、snapshot、VIEW的SELECT语句
-INSERT语句的子查询中
-NSERT语句的VALUES中
-UPDATE的SET中

可以看如下例子:
INSERTINTOempVALUES
(empseq.nextval,'LEWIS','CLERK',7902,SYSDATE,1200,NULL,20);

SELECTempseq.currvalFROMDUAL;

但是要注意的是:
-第一次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防止这种情况。

2、AlterSequence
你或者是该sequence的owner,或者有ALTERANYSEQUENCE权限才能改动sequence.可以alter除start至以外的所有sequence参数.如果想要改变start值,必须dropsequence再re-create.
Altersequence的例子
ALTERSEQUENCEemp_sequence
INCREMENTBY10
MAXVALUE10000
CYCLE--到10000后从头开始
NOCACHE;

影响Sequence的初始化参数:
SEQUENCE_CACHE_ENTRIES=设置能同时被cache的sequence数目。

可以很简单的DropSequence
DROPSEQUENCEorder_seq;

好吧,就到这里。


-------------------------------------------------------------
自增长及触发器:

如何在Oracle中实现类似自动增加ID的功能?
整理编辑:ChinaASP

我们经常在设计数据库的时候用一个系统自动分配的ID来作为我们的主键,但是在ORACLE中没有这样的

功能,我们可以通过采取以下的功能实现自动增加ID的功能
1.首先创建sequence
createsequenceseqmaxincrementby1
2.使用方法
selectseqmax.nextvalIDfromdual
就得到了一个ID
如果把这个语句放在触发器中,就可以实现和mssql的自动增加ID相同的功能!

-------------------------------------------------------------------------

由macro发布于:2001-04-1314:44

作者:MacroZeng

###建表###

CREATETABLE"SPORTS"."LINEUP"("ID"NUMBERNOTNULL,"TYPE"
NUMBER(3)NOTNULL,"BODY"VARCHAR2(100)NOTNULL,"HITS"NUMBER(
10)DEFAULT0NOTNULL,PRIMARYKEY("ID"))
TABLESPACE"TS_SPORTS"

###建序列###

CREATESEQUENCE"SPORTS"."SPORTS_LINEUP_ID_SEQ"INCREMENTBY1
STARTWITH1MAXVALUE1.0E28MINVALUE1NOCYCLE
CACHE50NOORDER

###建自动更新的触发器###

CREATEORREPLACETRIGGER"SPORTS"."SPORTS_LINEUP_ID_TRIGGER"
BEFOREINSERT
ON"SPORTS"."LINEUP"
FOREACHROW
DECLARE
next_idNUMBER;
BEGIN
--Getthenextidnumberfromthesequence
SELECTsports_lineup_id_seq.NEXTVAL
INTOnext_id
FROMdual;

--Usethesequencenumberastheprimarykey
--fortherecordbeinginserted.
:new.id:=next_id;
END;

###建保护PRIMARYKEY的触发器###

CREATEORREPLACETRIGGER"SPORTS"."LINEUP_ID_UPDATE_TRIGGER"
BEFOREUPDATEOF"ID"ON"SPORTS"."LINEUP"
FOREACHROW
BEGIN
RAISE_APPLICATION_ERROR(-20000,
'sports_lineup_id_update_trigger:UpdatesoftheIDfield'
||'arenotallowed.');
END;

转载于:https://www.cnblogs.com/linpengfeixgu/articles/1595710.html

在Oracle中实现自增加ID的功能相关推荐

  1. oracle中sql查询增加自增序列号

    如果我们需要在oracle中查询一系列数据,但是需要对查询出来的数据有一个自增的序列号,方便后续的处理的话,我们可以利用rownum 比如有table A 我们可以这么写sql select a.*, ...

  2. oracle中forall in,oracle10g的forall功能加强

    oracle10g的forall功能加强[@more@]In Oracle Database 10g, PL/SQL now offers two new clauses in the FORALL ...

  3. oracle如何获取自增id,oracle实现自增id

    --oracle实现自增id --创建一张T_StudentInfo表 create table T_StudentInfo ( "id" integer not null pri ...

  4. oracle增加字段为主键自增_在 Oracle 中设置自增列

    如果你经常使用 MySQL,你肯定对 AUTO_INCREMENT 非常熟悉,因为经常要用到它. 一.什么是自增列 ? 自增列是数据库中值随插入的每个行自动增加的一列.它最常用于主键或 ID 字段,这 ...

  5. oracle主机自增,Oracle中实现ID自增

    一.自增列 自增列是数据库中值随插入的每个行自动增加的一列.它最常用于主键或 ID 字段,这样每次增加一行时,不用指该字段的值,它就会自动增加,而且是唯一的. 当在 MySQL 中定义列时,我们可以指 ...

  6. Metalink Note:中文文档列表 - Oracle EBS (Enterprise Business Suite) [ID 1553829.1]

    Oracle中国的技术支持团队正在把一些常见Oracle EBS的Metalink Notes翻译成中文,这肯定会大大提升用户的使用体验,毕竟还是绝大多数用户,技术人员还是习惯阅读中文的技术文档. 大 ...

  7. Oracle中对现有表增加列

    altertable Tablename add(column1 varchar2(20),column2 number(7,2)...) --Oracle中修改列名不可以,但是可以删除列,增加列 a ...

  8. Oracle查询所有序列;[oracle中如何创建表的自增ID(通过序列);oracle sql语句大全

    Oracle查询所有序列 oracle sql语句大全 oracle中如何创建表的自增ID(通过序列)

  9. oracle表中增加字段 sql语句,ORACLE中通过SQL语句(alter table)来增加、删除、修改字段...

    1.添加字段: alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ; 2.添加备注: comment on ...

最新文章

  1. Python发展迅猛,如何在Python热中脱颖而出了?
  2. MyBatis01 Idea中搭建MyBatis开发环境
  3. 水晶报表使用经验谈1--建立水晶报表第一步及编译最易出现错误的解决方法及报表转换成pdf文档进行打印方法...
  4. SAP 电商云 Spartacus UI Angular Component 动态创建的单步调试
  5. 如何免费申请并使用SAP Marketing Cloud测试系统
  6. python学习-日志(logging的定义、参数、format、示例代码、创建logging对象、设置Handler)
  7. c语言memcopy_C语言中memcpy 函数的用法详解
  8. Java——IO流(序列流)
  9. Jupyter notebook应用总结
  10. Java集合框架-重构设计
  11. 浅谈C++中内存泄漏的检测
  12. Verilog作业(一)
  13. Python:***测试开源项目
  14. 深入浅出通信原理MIMO合集
  15. macOS BigSur下根目录下无法创建文件
  16. 输出100以内的质数
  17. Word的”交叉引用“和”插入题注“快捷键设置
  18. Power BI(十九)power pivot之常用筛选器函数
  19. 新存储、新格局、新飞跃,浪潮存储应时而来
  20. matlab 读取ENVI中*.img格式图片代码

热门文章

  1. 剑指Offer(Java实现)按之字形顺序打印二叉树
  2. opencv matlab测距,基于MATLAB和OpenCV的双目视觉测距系统的实现
  3. 【正一专栏】再见小马哥——永记你含着泪的笑
  4. 外企面试--基本涵盖了所有问题
  5. Fiddler 技术篇-捕捉https协议设置,抓取百度https实例演示
  6. JDK1.8的安装与环境变量设置演示,java、jre安装及配置
  7. VS Code(Visual Studio Code)编辑器的常用设置
  8. C# 学习笔记(19)操作SQL Server下
  9. C# 学习笔记(12)hex文件转bin文件小工具
  10. CTFshow 命令执行 web51