Oracle序列和触发器的使用

Oracle不能直接设定某字段自增,需要通过建序列和触发器,实现主键的自增功能

一、序列

1,建序列

序列的语法格式为:
CREATE SEQUENCE name                       //name为序列的名称
[INCREMENT BY n]                           //n序列的步长
[START WITH n]                             //n序列的初始值
[{MAXVALUE / MINVALUE n | NOMAXVALUE}]     //n序列的最大值或最小值
[{CYCLE | NOCYCLE}]                        //序列达到最大值时是否循环
[{CACHE n | NOCACHE}];                     //定义序列内存块大小

INCREMENT BY       用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的。

START WITH          定义序列的初始值(即产生的第一个值),默认为1。

MAXVALUE             定义序列的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,对于递增序列,系统最大值是10的27次方;对于递减序列,最大值是-1。

MINVALUE              定义序列的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,对于递减序列,系统最小值是10的26次方;对于递增序列,最小值是1。

CYCLE和NOCYCLE   表示当序列值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果不循环,达到限制值后,继续产生新值就会发生错误。

CACHE和NOCACHE  定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能

建名为"SEQ_IP"的序列实例:
create sequence SEQ_IP
increment by 1
start with 1
minvalue 1 nomaxvalue
nocycle;

2,删除序列

删除序列的语法是:
DROP SEQUENCE name       //name为序列名

  

二、触发器

触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,触发器与存储过程 的区别在于:存储过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的。

触发器语法格式为:

CREATE [OR REPLACE] TIGGER  触发器名
 触发时间
 触发事件
ON 表名
[FOR EACH ROW]
BEGIN
  pl/sql语句
END

触发器名:触发器对象的名称,由于触发器是自动执行的,因此该名称只是一个名称,没有实质的用途。

触发时间:指明触发器何时执行,该值可取:

before---表示在数据库动作之前触发器执行;

after---表示在数据库动作之后出发器执行。

触发事件:指明哪些数据库动作会触发此触发器:

例如:insert:数据库插入会触发此触发器;

创建触发器实例:

create or replace trigger TGR_TABLE_IP           //TGR_TABLE_IP为触发器名
  before insert                                  //指插入表前启动触发器
  on tIP                                         //tIP为表名
  for each row                                   //每行执行此操作
begin
    if inserting and :new.FID is null then
        :new.FID := SEQ_IP.nextval;               //SEQ_IP为序列名
    end if;
end TGR_TABLE_IP;

注:当连续创建多个触发器时,使用 / 分隔

时间: 2024-10-07 17:03:09

Oracle序列和触发器的使用的相关文章

触发器 'SA.U_USER_INFO_TRG' 无效且未通过重新验证--Oracle序列

程序开发时报错:触发器 'SA.U_USER_INFO_TRG' 无效且未通过重新验证打开触发器的定义,执行其中的语句,发现序列 U_USER_INFO_SEQ 未定义.什么是序列呢?序列相当于sqlserver中那些自增的id,有步长.最大值.最小值等属性.在Oracle中是自定义的. 本篇文章的主题是通过创建Oracle序列和触发器实现表的主键自增. 1.首先创建序列,Oracle序列的语法格式为:CREATE SEQUENCE 序列名[INCREMENT BY n][START WITH

Oracle序列使用:建立、删除

在开始讲解Oracle序列使用方法之前,先加一点关于Oracle client sqlplus的使用,就是如果执行多行语句的话一定要加“/”才能表示结束,并执行!本篇文章的主题是通过创建Oracle序列和触发器实现表的主键自增. 1.首先创建序列,Oracle序列的语法格式为:CREATE SEQUENCE 序列名[INCREMENT BY n][START WITH n][{MAXVALUE/ MINVALUE n|NOMAXVALUE}][{CYCLE|NOCYCLE}][{CACHE n|

oracle 主键应用序列和触发器实现自动增长

oracle 主键自动增长 这几天搞Oracle,想让表的主键实现自动增长,查网络实现如下: create table simon_example ( id number(4) not null primary key, name varchar2(25) ) -- 建立序列: -- Create sequence create sequence SIMON_SEQUENCE minvalue 1 maxvalue 999999999999999999999999999 start with 1

Oracle中用序列和触发器实现ID自增

在设计数据库的时候,Oracle中没有类似SQL Server中系统自动分配ID作为主键的功能,这时Oracle可以通过"序列"和"触发器"来实现ID自动增加的功能. 1.创建序列Sequence create sequence seq_uid increment by 1 start with 1 nomaxvalue nocycle cache 10 ; 其中:"seq_uid"表示自定义的序列名称: "start with 1&q

Oracle中序列及触发器使用

总结一下这次使用的序列和触发器,也把相应的一些操作用了一下.遇到的问题比较奇葩,仅供参考. 一.序列部分(网上的) 1.建立序列SEQUENCE create sequence user_seq increment by 1 start with 1 minvalue 1 maxvalue 9999999999999 nocache order; 语法: CREATE SEQUENCE s_id NOMAXVALUE NOCYCLE --INCREMENT BY 1    -- 每次加几个 --

SQL server 和Oracle 序列

1,SQL Server序列创建与使用 BEGIN IF EXISTS (SELECT * FROM sysobjects WHERE name = 'event_seq') DROP SEQUENCE event_seq END CREATE SEQUENCE event_seq MINVALUE 1 MAXVALUE 999999999999999999 START WITH 1 INCREMENT BY 1 CACHE 20; --使用时 GO select next value for

Oracle序列和主键映射

前言 每张表都有主键,可分别简单主键和组合主键,简单主键为表中的一列,组合主键为表中的几列.主键的生成策略有许多种,其中,序列是oracle常见的主键生成策略之一.本文主要讲解JPA映射主键的技术细节.其中,主键生成策略是oracle序列,JPA实现是Hibernate. oracle序列 创建序列 drop sequence testsequence; Create sequence testsequence Increment by 1 Start with 1 NOMAXVALUE NOM

ORACLE序列触发

-- Create sequence create sequence MFB_REGION_SEQminvalue 1maxvalue 999999999start with 6increment by 1nocache; 针对这个序列添加触发器. CREATE OR REPLACE TRIGGER TGR_ID_MFB_REGIONBEFORE INSERT ON MFB_REGION FOR EACH ROWBEGIN SELECT MFB_REGION_SEQ.NEXTVAL INTO :

oracle 序列 详解

序列: 是oacle提供的用于产生一系列唯一数字的数据库对象. l  自动提供唯一的数值 l  共享对象 l  主要用于提供主键值 l  将序列值装入内存可以提高访问效率 创建序列: 1.  要有创建序列的权限 create sequence 或 create any sequence 2.  创建序列的语法 CREATE SEQUENCE sequence  //创建序列名称        [INCREMENT BY n]  //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1