实现oracle数据库字段自增长(两种方式)

 更新时间:2015年07月28日 11:17:17   投稿:mrr  
这篇文章主要通过两种方式实现oracle数据库字段自增长,第一种方式是序列+触发器,第二种方式序列+显示调用序列,需要的朋友可以参考下

程序猿都知道mysql等其他的数据库都有随着记录的插入而表ID会自动增长的功能,反而oracle却没有这一功能,下面通过两种方式来解决字段增长的功能,具体内容情况下文。

因为两种方式都需要通过创建序列来实现,这里先给出序列的创建方式。

复制代码 代码如下:

CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE/ MINVALUE n|NOMAXVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n|NOCACHE}];

解析:

1)INCREMENT BY用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。

2)START WITH 定义序列的初始值(即产生的第一个值),默认为1。

3)MAXVALUE 定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增Oracle序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。

4)MINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。

5)CYCLE和NOCYCLE 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。

6)CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。

解决方式一、序列+触发器

具体实现方式如下:

第一步,创建sequence

复制代码 代码如下:

-- Create sequence
create sequence SEQ_T_RECV
minvalue 1
maxvalue 9999999
start with 1
increment by 1
cache 50;

第二步,创建表

复制代码 代码如下:

-- Create table
create table RECV_MSG
(
  id          NUMBER,
  messageid   VARCHAR2(32),
  contents    VARCHAR2(2000),
  app_flg     VARCHAR2(100),
  phonenumber VARCHAR2(2000),
  updatetime  DATE default sysdate
);

第三步,建立触发器

复制代码 代码如下:

CREATE OR REPLACE TRIGGER "recv_trig"
  BEFORE INSERT ON recv_msg
  REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
DECLARE
BEGIN
  SELECT SEQ_T_RECV.NEXTVAL INTO :NEW.ID FROM DUAL;
END recv_trig;

第四步,测试并确认
向表中插入一条数据,查看id字段是否自动增长了。

解决方式二、序列+显示调用序列

一、创建sequence

复制代码 代码如下:

create sequence seq_on_test
increment by 1
start with 1
nomaxvalue
nocycle
nocache;

二、建表

复制代码 代码如下:

--建表
drop table test;
create table test(
ID integer
,stu_name nvarchar2(4)
,stu_age number
);

三、插入数据(显示调用序列的下一个值插入)

复制代码 代码如下:

--插入数据
insert into test values(seq_on_test.nextval,'Mary',15);
insert into test values(seq_on_test.nextval,'Tom',16);

四、查看

复制代码 代码如下:

select * from test;

--结果
/*
1 Mary 15
2 Tom 16
*/

附带:查看序列当前值和下一个值的查看方式

复制代码 代码如下:

--seq的两个方法
select seq_on_test.currval from dual;
select seq_on_test.nextval from dual;

--结果
/*
2
3
*/

以上就是通过两种方式介绍oracle数据库字段自增长的全部介绍,希望对大家有所帮助。

相关文章

  • Oracle中Union与Union All的区别(适用多个数据库)

    Oracle中Union与Union All的区别(适用多个数据库)

    如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来
    2012-07-07
  • Oracle根据逗号拆分字段内容转成多行的函数说明

    Oracle根据逗号拆分字段内容转成多行的函数说明

    在做系统时经常会遇到在一个字段中,用逗号或其他符号分隔存储多个信息,下面这篇文章主要给大家介绍了关于Oracle根据逗号拆分字段内容转成多行的函数说明,需要的朋友可以参考下
    2023-04-04
  • Oracle Logminer快速使用详解

    Oracle Logminer快速使用详解

    这篇文章主要介绍了Oracle Logminer使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • Oracle截取JSON字符串内容的方法

    Oracle截取JSON字符串内容的方法

    这篇文章主要介绍了Oracle截取JSON字符串内容 ,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • oracle wm_concat 列转行 逗号分隔

    oracle wm_concat 列转行 逗号分隔

    oracle wm_concat函数,用于列转行,逗号分隔本文将详细介绍此功能的应用
    2012-11-11
  • Oracle 11g实现安全加固的完整步骤

    Oracle 11g实现安全加固的完整步骤

    这篇文章主要给大家介绍了关于Oracle 11g实现安全加固的完整步骤,文中通过示例代码将实现的步骤一步步介绍的非常详细,对大家学习或者使用Oracle 11g具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2018-05-05
  • Mac上Oracle数据库的安装及过程中一些问题的解决

    Mac上Oracle数据库的安装及过程中一些问题的解决

    这篇文章主要介绍了Mac上安装Oracle数据库的安装及过程中一些问题的解决,需要的朋友可以参考下
    2015-12-12
  • Oracle字符函数应用检测汉字的方法

    Oracle字符函数应用检测汉字的方法

    这篇文章主要介绍了Oracle字符函数应用检测汉字的方法,需要的朋友可以参考下
    2017-03-03
  • 详解Sqlsugar调用Oracle的存储过程

    详解Sqlsugar调用Oracle的存储过程

    作者在使用Sqlsugar调用Oracle存储过程时遇到问题,通过添加NuGet包和Oracle驱动,解决了连接问题,并创建了一个测试存储过程来验证,关键点在于游标参数必须为空字符,而不是object或null,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • oracle如何使用java source调用外部程序

    oracle如何使用java source调用外部程序

    这篇文章主要为大家介绍了oracle如何使用java source调用外部程序,感兴趣的小伙伴们可以参考一下
    2016-09-09

最新评论