精华内容
下载资源
问答
  • oracle创建自增序列

    千次阅读 2019-11-15 21:45:14
    Oracle中,当需要建立一个自增字段时,需要用到sequence。sequence也可以在mysql中使用,但是有些差别,日后再补充,先把oracle中sequence的基本使用总结一下,方便日后查阅。 在oracle中sequence就是序号,每次取...

     Oracle中,当需要建立一个自增字段时,需要用到sequence。sequence也可以在mysql中使用,但是有些差别,日后再补充,先把oracle中sequence的基本使用总结一下,方便日后查阅。

    在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。

     

    1. Create Sequence

        首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限。

        创建语句如下:

    CREATE SEQUENCE seqTest

    INCREMENT BY 1 -- 每次加几个

    START WITH 1 -- 从1开始计数

    NOMAXvalue -- 不设置最大值

    NOCYCLE -- 一直累加,不循环

    CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE

     

    说明:

     minvalue:序列最小值

     maxvalue/nomaxvalue:序列最大值/没有最大值

     start with 1:序列从1开始

     increment by 1:每次增加1

     cache/nocache:nocache不缓存。cache缓存。开启缓存,效率高,只是如果数据库宕机了,缓存丢失,会出现序列跳号情况。

     

    2.查看已有sequence:

    select * from user_sequences; 

    Select * from all_sequences;

    3.得到Sequence值

    两种方式

    ① select last_number from user_sequences where sequence_name='SEQ_ON_USER';  

    ② select SEQ_ON_USER.nextval from sys.dual;  

     

    定义好sequence后,你就可以用currVal,nextVal取得值。

        CurrVal:返回 sequence的当前值

        NextVal:增加sequence的值,然后返回 增加后sequence值

      得到值语句如下:

    SELECT Sequence名称.CurrVal FROM DUAL;

      如得到上边创建Sequence值的语句为:

    select seqtest.currval from dual

     

    在Sql语句中可以使用sequence的地方:

        - 不包含子查询、snapshot、VIEW的 SELECT 语句

        - INSERT语句的子查询中

        - INSERT语句的values中

        - UPDATE 的 SET中

     

    如在插入语句中

    insert into 表名(id,name)values(seqtest.Nextval,'sequence 插入测试');

     

     注:

        - 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。

          CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。

           一次NEXTVAL会增加一次 SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。

        - 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组 到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。

     

    4.Alter Sequence

        拥有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create。

    例:

    alter sequence SEQTEST maxvalue 9999999;

        另: SEQUENCE_CACHE_ENTRIES参数,设置能同时被cache的sequence数目。

     

    5.Drop Sequence

    DROP SEQUENCE seqTest;

    6. 一个例子

    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 S_Depart   --S_Depart 是表名

      for each row

    declare

      nextid number;

    begin

      IF :new.DepartId IS NULLor :new.DepartId=0 THEN --DepartId是列名

        select SEQ_ID.nextval --SEQ_ID正是刚才创建的

        into nextid

        from sys.dual;

        :new.DepartId:=nextid;

      end if;

    end tri_test_id;

     

    上面的代码就可以实现自动递增的功能了。

    或者

    1. create or replace trigger "SEQ_ON_USER_GENERATOR" before  
    2. insert on databasename1.T_USER for each row  
    3. declare  
    4. mid number,  
    5. begin  
    6. select SEQ_ON_USER.nextval into mid from dual;  
    7. :new.id:=mid;  
    8. end   
    9. create trigger SEQ_ON_USER_Trigger   
    10. before insert on T_USER for each row   
    11. begin   
    12. select SEQ_ON_USER.nextval into :new.id from dual;   
    13. end SEQ_ON_USER_Trigger;   

     

    展开全文
  • ORACLE建立自增序列

    2012-08-10 21:18:20
    ORACLE建立自增序列  步骤:  1.创建序列  2.创建触发器。 语法解析: create sequence TB_CODE_SEQUENCE minvalue 1 maxvalue 999999999999999999999999999 start with 11 increment by 1 ...

    ORACLE建立自增序列  

    步骤:

       1.创建序列
       2.创建触发器。

    语法解析:
    create sequence TB_CODE_SEQUENCE
    minvalue 1
    maxvalue 999999999999999999999999999
    start with 11
    increment by 1
    cache 10;

    CREATE OR REPLACE TRIGGER tb_code_Increase BEFORE insert ON tb_code 
    FOR EACH ROW 
    begin 
     select tb_code_Sequence.nextval into:New.ID from dual;
    end;

    create sequence TB_CODE_SEQUENCE  ---创建一个名为TB_CODE_SEQUENCE的序列。
    minvalue 1 ---最小值为1
    maxvalue ---最大值,可对maxvalue设置任意正整数值。当不设任何值时,默认为999999999999999999999999999
    start with 11---从第11条记录开始,当表中没有记录,则从1开始
    increment by 1---增量值为1,每次自增1
    cache 10 ---CACHE(缓冲)定义存放序列的内存块的大小,默认为20。

    CREATE OR REPLACE TRIGGER tb_code_Increase  ---创建一个名为tb_code_Increase的触发器
    BEFORE insert ON tb_code ---定义发生什么时间时激发触发器,这里定义为在对tb_code表进行插入之前激发触发器
    FOR EACH ROW ---循环每一行
    begin
     select tb_code_Sequence.nextval into:New.ID from dual; ---查询序列当中nextval返回的值并返回给序列。
    end;

    修改: 
    序列的某些部分也可以在使用中进行修改,但不能修改SATRT WITH选项。
    对序列的修改只影响随后产生的序号,已经产生的序号不变。

     

     

    展开全文
  • ORACLE中的表实现类似SQLSERVER中IDENTITY(1,1)序号自增的功能,原理是通过sequences与triggers触发器实现。
    展开全文
  • oracle 生成自增序列

    2018-01-27 15:01:47
    创建序列 CREATE SEQUENCE "HSSP_DEV" . "HSS_TASK_PAY_BILL_S" ...HSS_TASK_PAY_BILL_S 为序列名 ,表示从1到 9999999999999999999999999999 步长...HSS_TASK_PAY_BILL为表名 ,TASK_PAYMENT_ID为需要自增的字段

    创建序列

    CREATE SEQUENCE  "HSSP_DEV"."HSS_TASK_PAY_BILL_S"  MINVALUE 1 
    MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE ;

    HSS_TASK_PAY_BILL_S 为序列名 ,表示从1到 9999999999999999999999999999 步长为1进行递增

    创建定时器

    create or replace trigger HSS_TASK_PAY_BILL_T
    before insert on HSS_TASK_PAY_BILL
    for each 
    row
    begin
         select  HSS_TASK_PAY_BILL_S.NEXTVAL into:new.TASK_PAYMENT_ID from dual;
    end;

    HSS_TASK_PAY_BILL为表名 ,TASK_PAYMENT_ID为需要自增的字段

    展开全文
  • 那如何实现Oracle的主键自增呢,这里我们记录一种最常用的方式:sequence + trigger。 就是利用Oralce的序号和触发器来实现字段的自增,下面直接来看一个完整的例子。 一、创建表结构 这里我们简单创建一张表...
  • oracle 自增序号

    千次阅读 2009-01-17 18:04:00
    Oracle: --第一步:先创建序列 SQL>CREATE SEQUENCE IDENTITY_ID START WITH 1 INCREMENT BY 1 order nocycle; / --第二步:创建表 SQL>CREATE TABLE TEMP(ID INT,NAME VARCHAR2(1
  • SQLSERVER自增字段和Oracle创建自增字段-ORACLE SEQUENCE方法的对比 并且用存储过程实现 带参数输出 --SQLSERVER版本的实现 CREATE TABLE [dbo].[Accounts_Permissions]( [PermissionID] [int] IDENTITY(1,1) NOT ...
  • 创建序列: CREATE sequence 序列名 minvalue 1 maxvalue 9999999999999999999999999999 start with 2 increment by 2 cache 20 order; ...ALTER TABLE 表名 MODIFY ("ID" DEFAULT "序列名".nextval )...
  • 步骤:1.创建序列  2.... 语法解析: ...对序列的修改只影响随后产生的序号,已经产生的序号不变。   注意,最好在本机做这些操作。 转载于:https://www.cnblogs.com/zrui-xyu/p/5525977.html
  • 原来一致用的是sqlserver...oracle中没有自增列,这样的设定,必须手工写个方法 或用 序列 或用 触发器   还是用的序列方便(个人习惯)   create sequence salary_seq increment by 1 ---每次加几个 ...
  •  第一种:设置ID的增长策略是sequence,同时指定sequence的名字,最好每个表建一个sequence,此种做法就如同MY-SQL中的自动增长一样,不需要创建触发器,具体的oracle数据库脚本及hibernate配置文件如下: ...
  • 都不是很合适,于是采用了oracle sequence 自增的方案,由于本业务的并发并不高,所以性能上应该是够了,下面是修改过后的代码(非正式投产版)。 通过创建序列,每次只需要获得序列的下一个值,保证了主键唯一性,...
  • 给大家分享MyBatis Oracle 自增序列的实现方法及mybatis配置oracle的主键自增长的方法,非常不错具有一定的参考借鉴价值,感兴趣的朋友一起看看吧
  • ORACLE自增序列

    千次阅读 2020-04-30 20:40:28
    今天正式环境新增数据异常,排查后是oracle主键id已存在。并未实现自增。 原来之前导入一批数据,手动添加了id,导致id重复问题。 解决方法 1.删除自增序列 DROP SEQUENCE SEQ_TT_SECNET_MAINTAIN_INFO 一般...
  • 最近公司业务涉及到了在相应库中添加自增序号这种操作,闲暇之余,整理如下,仅供参考~ 一、Hive  1、首先在Hive中建立一个测试表 create table xzw(id int, name string) clustered by (id) into 2 buckets ...
  • 这里写自定义目录标题oracle自增序列及其触发器创建序列创建触发器序列的查询更改删除引用资源 oracle自增序列及其触发器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown...
  • Oracle数据库主键自增

    2021-05-13 11:17:48
    在学习mysql时,我们很容易通过auto_increment就能实现主键自增的功能,但是在Oracle数据库中,是没有这个关键字的,所以也不能通过这样来实现主键自增。下面我就为大家介绍两种实现主键自增的方法。 两种方法的...
  •  在oracle使用insert增加数据时,使用sequence自增时报错ORA-02287: 此处不允许序号  源代码: <insert id="insert"> INSERT INTO sysmgtdb.PUB_DICTTYPE(ID,CODE,NAME,VERSION,...
  • Oracle自增序列

    2011-06-13 16:17:00
    create sequence table_name_seqminvalue 1maxvalue 999999999999999999999999999start with 1increment by 1cache 100;CREATE OR REPLACE TRIGGER tri_table_nameBEFORE INSERT ON table_nameFOR E
  • MYSQL和ORACLE自增列的区别

    千次阅读 2016-08-14 11:25:57
    1. 自动增长的数据类型处理  MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。...oracle自增方式: --第一步:创建SEQUENCE  create sequence cmdb.M_MODULE_seq increment by
  • MyBatis Oracle 自增序列

    千次阅读 2016-05-13 11:37:15
    SELECT SEQ_TABLE.NEXTVAL FROM dual INSERT INTO s_id,name,age VALUES (#{s_id} #{name}, #{age} ) resultType="int" 返回的是一个int类型 ...keyProperty 把返回值,赋值给:parameterType中对象的对象的...
  • Oracle设置主键自增

    2019-09-23 11:04:41
    --将下一个ID序列插入作为新的序号 end; 4、输入数据测试 insert into CAR_INFO (TYPE,CAR_NUMBER,STATUS,COMPANY,SIGNING_TYPE,MAX_DURATION,MAX_MILEAGE) values (1,'沪A00001',1,'金盾押运公司',1,'10'...
  • ORACLE 自增序列SEQUENCE

    千次阅读 2008-08-06 11:44:00
    oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。 1、Create Sequence 你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限, CREATE SEQUENCE emp_sequence ...
  • oracle 里面设置自增序列

    千次阅读 2017-10-20 17:03:03
    如果想在Oracle数据库里实现数据表主键自增,我们似乎没有办法像MySql般直接定义列的属性来实现。不过对于这个数据库的常用功能,我们还是有办法实现的。这里将展示使用触发器来实现主键自增。 1.准备 ...
  • oracle 序列自增oracle

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,899
精华内容 1,159
关键字:

oracle序号自增