• 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;

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

  • 相关阅读:
    HTTP协议详解【转】
    Spring中的IOC和AOP
    Servlet生命周期
    Struts2基本原理【转】
    继承映射的三种方式
    树状数组(两个树状数组累计)
    二维数组数组(区间更新+单点查询)
    东西海岸(逆序对)
    离散化+单点更新+区间求和
    单调栈+dp
  • 原文地址:https://www.cnblogs.com/boby-/p/4724708.html
Copyright © 2020-2023  润新知