zoukankan      html  css  js  c++  java
  • oracle实现自增序列

    oracle 实现自增需要创建 squence(序列);
    如果需要插入时自动增加还需要创建一个 trigger(触发器),否则需要在程序中手工设置
    例如:将表fcbook的主键fid设置为自增 
    1. 创建squence
    Name : 创建的名字
    Min value : 最小计数
    Max value : 最大计数

    (创建一个序列从1开始自增,最大值到999999999。

    或者不设置最大值)

    Start with : 起始计数
    Increment by : 步长
    Cache size : 缓存序列
    指定Cache,oracle会预先在内存中放置一组指定大小的序列,当使用完这些序列后再生成下一组,这样会存取得快些,但当数据库关闭等情况时,下一次再生成序列时可能会使序列间断,不是一串连续的号,当不是特别需要连续的序列时最好指定;
    不填写Cache值,会使用默认设置,我这里是20;
    当Cache size设置为0时 为nocache,这样会产生连续的序列。
    Cycle : 循环序列,当到达最大值后从最小值重新开始
    Order : 保证序列产生的顺序和请求的顺序是一致的,在并行模式下如果A、B同时对序列请求那么先产生的序列号必然返回给先请求的用户。例如当前序列号为10,A先请求B后请求那么11一定返回给A,12给B,在noorder的情况下,有可能11给B,12给A。这种情况只发生在oracle并行服务器上,大多数情况下不需要。
    相应的squence创建sql:
    -- Create sequence
    create sequence Rayn.SEQ_FCBOOK
    minvalue 1
    maxvalue 99999999999
    start with 1
    increment by 1
    cache 20;
    使用序列:
    insert into article values (Raun.nextval,'TEST','test content');

    删除序列:

    drop sequence Rayn;
    2. 创建 trigger
    ORACLE触发器有以下两类:
     1> 语句级(Statement-level)触发器,在CREATE TRIGGER语句中不包含FOR EACH ROW子句。语句级触发器对于触发事件只能触发一次,而且不能访问受触发器影响的每一行的列值。一般用语句级触发器处理有关引起触发器触发的SQL语句的信息——例如,由谁来执行和什么时间执行。
     2> 行级(Row-level)触发器,在CREATE TRIGGER语句中包含FOR EACH ROW子句。行级触发器可对受触发器影响的每一行触发,并且能够访问原列值和通过SQL语句处理的新列值。行级触发器的典型应用是当需要知道行的列值时,执行一条事务规则。
    OK确认后,需要输入trigger_body,对应的sql补全为:
    create or replace trigger TR_FCBOOK  
      before insert on fcbook for each row
    begin
      SELECT SEQ_FCBOOK.Nextval INTO :new.fid FROM dual;
    end TR_FCBOOK;
    或者不使用触发器,在INSERT语句中直接使用s_id.nextval获取下一个自增值。
    上语法中,trigger_event 是对应于DML的三条语句INSERT、UPDATE、DELETE;table_name是与触发器相关的表名称;FOR EACH ROW是可选子句,当使用时,对每条相应行将引起触发器触发;condition是可选的ORACLE BOOLEAN条件,当条件为真时触发器触发;trigger_body是触发器触发时执行的PL/SQL块。
    在触发器体内,行级触发器可以引用触发器触发时已存在的行的列值,这些值倚赖于引起触发器触发的SQL语句。
    1> 对于INSERT语句,要被插入的数值包含在new.column_name,这里的column_name是表中的一列。
    2> 对于UPDATE语句,列的原值包含在old.column_name中,数据列的新值在new.column_name中。
    3> 对于DELETE语句,将要删除的行的列值放在old.column_name中。
  • 相关阅读:
    ROI选取
    大脑基底神经节
    毕业进度
    雅思8分大神叫你如何学习口语
    北京共有多少个区?_北京城中区是什么?城郊区是什么?
    功能连接分析中fisher-zsocre
    granger--platform_beta测试
    可买房摇号,北京市工作居住证全面解读
    2015年北京户口全攻略
    找实习
  • 原文地址:https://www.cnblogs.com/tv151579/p/2796994.html
Copyright © 2011-2022 走看看