知识大全 oracle数据库如何创建自增列的技巧教程

Posted 语句

篇首语:历史和哲学负有多种永恒的责任,同时也是简单的责任。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 oracle数据库如何创建自增列的技巧教程相关的知识,希望对你有一定的参考价值。

  Oracle没有自增字段这样的功能 但是通过触发器(trigger)和序列(sequence)可以实现

  先建一个测试表了

  create table userlogin (

  id   number( ) not null

  name   varchar ( )   not null primary key

  )

  tablespace users

  第一步 创建SEQUENCE

   create sequence userlogin_seq increment by start with minvalue maxvalue nocache order;

   第二步 创建一个基于该表的before insert 触发器 在触发器中使用刚创建的SEQUENCE

   create or replace trigger userlogin_trigger before insert on userlogin for each row begin       select   userlogin_seq nextval   into:new id from sys dual ; end;

  第三步 在userlogin表中测试

  写个insert语句 插入一条记录 看ID字段自增了没 自增则OK啦  

   oracle没有ORACLE自增字段这样的功能 但是通过触发器(trigger)和序列(sequence)可以实现

  先建一个测试表了

  create table userlogin (

  id   number( ) not null

  name   varchar ( )   not null primary key

  )

  tablespace users

  /

   第一步 创建SEQUENCE

   create sequence userlogin_seq increment by start with minvalue maxvalue nocache order;

   第二步 创建一个基于该表的before insert 触发器 在触发器中使用刚创建的SEQUENCE

   create or replace trigger userlogin_trigger before insert on userlogin for each row begin       select   userlogin_seq nextval   into:new id from sys dual ; end;

  /

   第三步 在userlogin表中测试

  写个insert语句 插入一条记录 看ID字段自增了没 自增则OK啦    

   Oracle序列知识

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

  一旦定义了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 SYSDATE NULL );

  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防止这种情况

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

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

cha138/Article/program/Oracle/201311/19077

相关参考

知识大全 oracle字段自增两段代码搞定

  (这几天做了个小小课程设计时用的是oracle数据库第一次用发现oracle和我们以前用的sqlservermysql是有如此多不同的地方下面是遇到的问题之一和解决方法和大家分享下)  用惯sql

知识大全 Oracle使用触发器实现自增ID

Oracle使用触发器实现自增ID  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  userinf

知识大全 Oracle创建数据库的手工方法

Oracle创建数据库的手工方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle数据

知识大全 Oracle 10i数据库创建过程

Oracle10i数据库创建过程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oraclei数

知识大全 在Oracle中合理创建数据库的索引

在Oracle中合理创建数据库的索引  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Oracl

知识大全 Oracle10g手工创建数据库

个人经验总结:Oracle10g手工创建数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  创

知识大全 创建Oracle10gASM数据库

创建Oracle10gASM数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!概述  在真正的海

知识大全 多个Oracle数据库创建一个Excel报表

多个Oracle数据库创建一个Excel报表  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  微软

知识大全 手动创建Oracle数据库之前因后果

手动创建Oracle数据库之前因后果  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于许多数据

知识大全 在单机上创建物理Oracle数据库9istandby

在单机上创建物理Oracle数据库9istandby  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!