首先,你要有一张表!
       CREATE TABLE example(
             ID Number(4) NOT NULL PRIMARY KEY,
             NAME VARCHAR(25),
             PHONE VARCHAR(10),
             ADDRESS VARCHAR(50)

);

然后,你需要一个自定义的sequence
     CREATE SEQUENCE emp_sequence
          INCREMENT BY 1 -- 每次加几个
          START WITH 1 -- 从1开始计数
          NOMAXVALUE -- 不设置最大值
          NOCYCLE -- 一直累加,不循环
          NOCACHE -- 不建缓冲区
     以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq
,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!跑题了!)
     书接上文,你只有了表和序列还不够,还需要一个触发器来执行它!代码如下:
     CREATE TRIGGER "触发器名称" BEFORE
          INSERT ON example FOR EACH ROW WHEN (new.id is null)
      begin
          select emp_sequence.nextval into: new.id from dual;
       end;
     打完收工!下面你就试试插入数据吧!
          INSERT INTO example(Name,phone,address) Values('Cao','56498543','Heibei');

=============================================================
     ORACLE SEQUENCE的简单介绍(自增长字段)- -

在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
     1、Create Sequence
          你首先要有CREATE SEQUENCE或者CREATE ANYSEQUENCE权限,
               CREATE SEQUENCE emp_sequence
                    INCREMENT BY 1--每次加几个
               STARTWITH 1--从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中

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

SELECT empseq.currval FROM DUAL;

但是要注意的是:
     第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENTBY值,然后返回增加后的值。CURRVAL总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白?

如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。使用cache或许会跳号,比如数据库突然不正常down掉(shutdownabort),cache中的sequence就会丢失.所以可以在createsequence的时候用nocache防止这种情况。

2、Alter Sequence
     你或者是该sequence的owner,或者有ALTE RANYSEQUENCE权限才能改动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
          DRO SEQUENCE order_seq;

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

如何在Oracle中实现类似自动增加ID的功能?
          我们经常在设计数据库的时候用一个系统自动分配的ID来作为我们的主键,但是在ORACLE中没有这样的功能,我们可以通过采取以下的功能实现自动增加ID的功能
     1.首先创建sequence
          create sequence seq maxincrement by 1
     2.使用方法
          select seqmax.nextval ID from dual
     就得到了一个ID
     如果把这个语句放在触发器中,就可以实现和mssql的自动增加ID相同的功能!

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

###建表###

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,
          PRIMARYKEY("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 primarykey
     --for there cord being inserted.
     :new.id:=next_id;
     END;

###建保护PRIMARYKEY的触发器###

CREATE OR REPLACE TRIGGER "SPORTS"."LINEUP_ID_UPDATE_TRIGGER"
          BEFORE UPDATE OF "ID" ON "SPORTS"."LINEUP" FOR EACHROW
     BEGIN
     RAISE_APPLICATION_ERROR(-20000,
     'sports_lineup_id_update_trigger:Update sof the ID field'
     ||'arenotallowed.');
     END;

###建删除的触发器###
     create   or replace trigger tr_bis_exc_req_del
     before delete
          on bis_exc_req
          referencing old as old new as new
     for each row
     begin
        if :old.check_status = '3' then
        raise_application_error (-20001,'*****!');
        return;
        end if;
     end;
     /

###建更新的触发器###
     create   or replace trigger tr_bis_exc_req_upd
     before update
          on bis_exc_req
     referencing old as old new as new
     for each row
     begin
        if :old.check_status = '3' then
        raise_application_error (-20001,'*******!');
        return;
   end if;
  end;

转载于:https://www.cnblogs.com/GeneralXU/archive/2009/03/31/1425748.html

ORACLE自增长字段实现(转)相关推荐

  1. sql oracle 自增长字段,在Oracle、MySQL、MS SQL Server中创设自动增长字段

    在Oracle.MySQL.MS SQL Server中创建自动增长字段 好吧,今天面试有道题,要各个数据库怎么建立自增长字段,顺便复习一下吧,最近面试很多数据库问题... 一:Oracle Orac ...

  2. sql oracle 自增长字段,Oracle添加自增长字段方法步骤

    CREATE SEQUENCE ZH_ALARM_INFO_SEQ--自动增长列 INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXVALUE - ...

  3. Spring Boot + JPA + Oracle 自增长字段实现示例

    JPA 主键生成策略 JPA提供了四种主键生成策略, 分别是: AUTO 自动选择一个最适合底层数据库的主键生成策略. IDENTITY: 主键由数据库自动生成, ID自增长, Oralcle 不支持 ...

  4. oracle主键增长方式,oracle 自增长主键

    oracle自增长主键 首先,你要有一张表!CREATE TABLE example( ID Number(4) NOT NULL PRIMARY KEY, NAME VARCHAR(25), PHO ...

  5. oracle判断非空并拼接,oracle sql 判断字段非空,数据不重复,插入多跳数据

     oracle sql 判断字段非空,数据不重复 select distinct(mobile) from wx_user_mobile where active_time is not null ...

  6. clob类型用java怎么存,Java 储存和读取 oracle CLOB 类型字段的实用方法

    当前位置:我的异常网» 编程 » Java 储存和读取 oracle CLOB 类型字段的实用方法 Java 储存和读取 oracle CLOB 类型字段的实用方法 www.myexceptions. ...

  7. mysql clob转string_Java获取Oracle中CLOB字段转换成String

    Java获取Oracle中CLOB字段转换成String : try {PreparedStatement stmt = session.connection().prepareStatement(s ...

  8. 读取oracle bfile字段,ORACLE中BFILE字段的使用研究_oracle

    因为做项目,需要使用BFILE字段存储图像文件,所以进行了一些研究. bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对 oracle来说是只读的,也不参与事务性控制和 ...

  9. oracle unused用法,set unused的用法(ORACLE刪除字段)

    set unused的用法(ORACLE刪除字段) 一.問題 現場有一張大數據量的分區表,數據量在10G以上.因某種原因需要刪除其中的某些字段.如果直接用 alter table1 drop (col ...

最新文章

  1. 华为设备ENSP静态路由的配置实战
  2. SpringBoot如何返回页面
  3. 字符函数和内存函数模拟实现
  4. python 经典100例 (61-80)
  5. 如何给mac地址赋值_交换机工作基础——MAC地址表的构成与安全
  6. Fabric学习笔记(一)- Centos 7下的Fabric 2.3.2环境搭建
  7. JQuery判断元素是否存在
  8. IDEA运行多个实例
  9. xlsx to vcf
  10. Kindle3之中文乱码问题
  11. 寻找漂流瓶上人快老板
  12. 几种主要的神经网络----全连接神经网络、前馈神经网络、卷积神经网络、循环神经网络
  13. 设置Linux服务器登录密码过期时长
  14. Python与c语言的区别与联系
  15. 数据结构系列三---[一周leetcode刷题记录3.7-3.13]
  16. 魔坊APP项目-25-种植园,植物的状态改动、当果树种植以后在celery的异步任务中调整浇水的状态、客户端通过倒计时判断时间,显示浇水道具
  17. 免费馅饼 (DP动态规划问题详细解析)
  18. Windows端安装lua脚本编写工具
  19. 操作系统思维导图——操作系统概论
  20. 用户鉴权之JWT和AKSK

热门文章

  1. 低代码工具让人人都是程序员?别再吐槽了,它能做这些事
  2. Python+BI可视化分析2000W数据之后,告诉你这届毕业生有多难
  3. 从传统企业谈大数据的战略意义
  4. 颜色叠加 java_可绘制Android上的颜色叠加
  5. avd已创建模拟手机 点击开始没反应_佳能微单开始降价,索尼、 尼康、 富士稳中有升……...
  6. zookeeper 虚拟机搭建好后 外部链接不上_Ubuntu Server搭建Hyperledger Fabric 2.1学习环境...
  7. api postmain 鉴权_API鉴权
  8. quartz.net隔一天执行一次_一天拉几次大便算正常?啥时候拉最好?关于便便的事,可算明白了...
  9. python函数式编程 pdf-Python函数式编程指南(二):从函数开始
  10. Python 中星号的本质及其使用方式