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;

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

原文地址:https://www.cnblogs.com/boby-/p/4724708.html