• 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自动递增的功能了。

    总结参考学习他人知识

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

  • 相关阅读:
    ELF和a.out文件格式的比较
    vim常用命令
    安装linux各种桌面环境
    使用virt-manager创建和管理虚拟机
    第一天 纪念一下
    i节点,容易被人遗忘的节点
    【Linux】服务器之间的免密登录脚本
    【python】python调用shell方法
    【ansible】ansible部署方式以及部署包
    【AWS】亚马逊云常用服务解释
  • 原文地址:https://www.cnblogs.com/ZHF/p/1297713.html
Copyright © 2020-2023  润新知