zoukankan      html  css  js  c++  java
  • Oracle 创建自增字段的方法—使用序列方法

    在Oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
    1、Create Sequence
    你首先要有create sequence或者create any sequence权限,
    CREATE SEQUENCE emp_sequence 
    increment by 1 -- 每次加几个 
    start with 1 -- 从1开始计数
    NOMAXvalue -- 不设置最大值 (maxvalue 99999999)
    nocycle -- 一直累加,不循环
    cache 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,

    也可以设置为---------NOCACHE
    针对S_Test创建的sequence如下:

    create sequence S_Test
    minvalue
    1
    maxvalue
    99999999
    start
    with 1
    increment
    by 1
    nocache;

    一旦定义了S_Test,你就可以用currval,nextval
    currval=返回 sequence的当前值
    nextval=增加sequence的值,然后返回 sequence 值
    比如:
    S_Test.CURRVAL
    S_Test.NEXTVAL

    可以使用sequence的地方:
    - 不包含子查询、snapshot、view的 select 语句
    - INSERT语句的子查询中
    - NSERT语句的values中
    - UPDATE 的 set中

    可以看如下例子:

    insert into S_Test(id,name,order)values(S_Test.Nextval,'wang',100);

    2、修改序列(Alter Sequence )
    你或者是该sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动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数目。


    3、删除序列
    简单的Drop Sequence
    drop sequence S_Test;

     

    下面是一个简单例子:
    create sequence SEQ_ID
    minvalue
    1
    maxvalue
    99999999
    start with
    1
    increment by
    1
    nocache
    order;

    建立解发器代码为:

    create or replace trigger tri_test_id --触发器名称
      before insert on Test    --Test是表名
      for each row
    declare
       nextid number;
    begin
      IF :new.id IS NULL or :new.id=
    0 THEN --id是列名
        select SEQ_ID.nextval --S_Test正是刚才创建的序列
        into nextid
        from sys.dual;
         :new.id:=nextid;
      end if;
    end tri_test_id;
    上面的代码就可以实现id自动递增的功能了。

    总结参考学习他人知识

    如果大家还有其它什么好的方法,欢迎提出,供大家共同学习交流。

  • 相关阅读:
    在tmux中如何复制文本并粘贴到某处?
    linux下的用户密码文件/etc/shadow
    linux下openssl命令解析
    第 27 章 CSS 传统布局[下]
    第 27 章 CSS 传统布局[上]
    第 26 章 CSS3 动画效果
    第 25 章 CSS3 过渡效果
    第 24 章 CSS3 变形效果[下]
    第 23 章 CSS3 边框图片效果
    第 22 章 CSS3 渐变效果
  • 原文地址:https://www.cnblogs.com/ZHF/p/1297713.html
Copyright © 2011-2022 走看看