广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Oracle中的序列SEQUENCE详解
  • 953
分享到

Oracle中的序列SEQUENCE详解

2024-04-02 19:04:59 953人浏览 薄情痞子
摘要

一、序列介绍 oracle的序列是一种数据库对象,主要作用是用来产生唯一值。序列被创建以后可以通过数据字典找到序列对象,因此序列可以被多个对象共享。 二、创建序列 序列使用CREAT

一、序列介绍

oracle的序列是一种数据库对象,主要作用是用来产生唯一值。序列被创建以后可以通过数据字典找到序列对象,因此序列可以被多个对象共享。

二、创建序列

序列使用CREATE SEQUENCE语法进行创建:

CREATE SEQUENCE sequence 
[INCREMENT BY n]
 [START WITH n]
 [{MAXVALUE n | NOMAXVALUE}]
 [{MINVALUE n | NOMINVALUE}]
 [{CYCLE | NOCYCLE}]
 [{CACHE n | NOCACHE}];
  • NCREMENT BY:用于定义序列的步长,如果省略,则默认为1,如果是负值,则代表序列的值是递减的。
  • START WITH:定义序列的初始值(即产生的第一个值),默认为1。
  • MAXVALUE:定义序列能生成的最大值。NOMAXVALUE是默认选项,代表没有最大值,这时,对于递增序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。
  • MINVALUE:定义序列能生成的最小值。NOMINVALUE是默认选项,代表没有最小值,这时,对于递减序列,系统能够产生的最小值是负的10的26次方;对于递减序列,最小值是1。
  • CYCLE和NOCYCLE:表示当序列生成器的值达到限制后是否循环。如果循环,当递增序列达到最大值时,循环到最小值;对于递减序列,达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。
  • CACHE:定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。

例如:

CREATE SEQUENCE invoice_seq
INCREMENT BY 1
START WITH 1
MAXVALUE 9999999
NOCYCLE NOCACHE;

三、查询序列

一旦序列被创建,序列的创建代码就被文本化在数据字典中,可以在user_objects数据字典中看到,如:

SELECT object_name,object_id,object_type  FROM user_objects WHERE object_name = 'INVOICE_SEQ';

在user_sequences表中保存了序列明细信息:

SELECT sequence_name, min_value, max_value, increment_by, last_number  FROM user_sequences;

四、使用序列

NEXTVAL和CURRVAL伪列

  • NEXTVAL:返回下一个可用的序列值,它每次返回一个唯一的被引用值,实际对不同的用户也是如此。当使用sequence.NEXTVAL时,一个新的序列数被产生并且当前的序列数被放入CURRVAL。
  • CURRVAL:获得当前的序列值。在首次使用NEXTVAL之前就使用CURRVAL的话,会报错。

使用如下 :

SELECT invoice_seq.CURRVAL,invoice_seq.NEXTVAL FROM DUAL;

INSERT INTO invoice  (invoice_id, vendor_id, invoice_number, invoice_total  )
      VALUES (invoice_seq.NEXTVAL, 10, 'INV' || invoice_seq.CURRVAL, 100  );

可以在下面的上下文中使用NEXTVAL和CURRVAL:

  • 不是子查询的一部分的SELECT语句的字段列表。
  • INSERT语句中子查询的SELECT列表。
  • INSERT语句中的VALUES子句。
  • UPDATE语句中的SET子句。

不能再以下的上下文中使用NEXTVAL和CURRVAL:

  • 视图的SELECT列表。
  • 带DISTINCT的SELECT语句。
  • 带GROUP BY、HAVING或ORDER BY子句的SELECT语句。
  • 在SELECT、DELETE或UPDATE语句中的子句。
  • 在CREATE TABLE或ALTER TABLE语句中的DEFAULT表达式。

另外要注意,ROLLBACK并不能使序列值回滚。

五、修改序列

如:

ALTER SEQUENCE invoice_seq     INCREMENT BY 2 MAXVALUE 10   NOCACHE  NOCYCLE;

修改序列时,有如下几个限制:

  • 不能该表序列的起始值。
  • 最小值不能大于当前值。
  • 最大值不能小于当前值。
  • 修改后的序列规则不会影响以前的序列值,只有未来的序列值会受到影响。
  • 用户必须具有ALTER SEQUENCE的权限。

六、删除序列

DROP SEQUENCE invoice_seq;

七、创建自增序列

1、创建一个序列

create sequence sq_recid 
minvalue 1 maxvalue 999999  increment by 1   start with 1 noCYCLE;

2、创建一个触发器

create or replace trigger  trg_test
  before  insert on test for each row
begin
  select sq_recid.nextval into :new.ID from dual;
end;

alter  trigger trg_test  enable;

3、在C#中也可以手工插入序列到表中

string sql="insert into test(ID,otherCol)value (Sql_recid.nextval,***)
    retuing ID into :ID"

到此这篇关于Oracle序列SEQUENCE的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Oracle中的序列SEQUENCE详解

本文链接: https://www.lsjlt.com/news/149873.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle中序列(Sequence)详解
    序列(Sequence)是Oracle数据库中的一种对象,用于生成唯一的递增或递减的数字序列。序列可以用于生成主键值或者其他需要唯一...
    99+
    2023-09-23
    Oracle
  • Oracle中的序列SEQUENCE详解
    一、序列介绍 Oracle的序列是一种数据库对象,主要作用是用来产生唯一值。序列被创建以后可以通过数据字典找到序列对象,因此序列可以被多个对象共享。 二、创建序列 序列使用CREAT...
    99+
    2022-11-13
  • Oracle中sequence(序列)使用方法详解
    目录1、create sequence seq_userinfo2、increment  by  13、start with 14、nomaxvalue5、nominvallue6、cach...
    99+
    2023-03-13
    oracle sequence用法 Oracle序列 oracle sequence序列
  • Oracle sequence序列
    sequence含义Oracle数据库提供了sequence对象,由系统提供自增长的序列号,通常用于数据库数据记录的自增长主键或序号的地方;创建语法格式及说明Create  sequencemys...
    99+
    2022-10-18
  • Oracle序列sequence
    这篇文章将为大家详细讲解有关Oracle序列sequence,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 ...
    99+
    2022-10-19
  • 详解ORACLE SEQUENCE用法
    ORACLE SEQUENCE是一种用于生成唯一数字序列的对象。它是一种独立于表的对象,在数据库中可以被共享和重用。使用ORACLE...
    99+
    2023-08-17
    Oracle
  • Kotlin中的惰性操作容器Sequence序列使用原理详解
    目录Sequence序列执行的顺序只做最少的操作序列可以是无限的序列不会在每个步骤创建集合Sequence的基本使用序列的创建序列的操作Sequence源码分析Sequence是什么...
    99+
    2022-11-13
  • oracle中创建序列及序列补零实例详解
    oracle中创建序列及序列补零实例详解 我们经常会在在DB中创建序列: -- Create sequence create sequence COMMON_SEQ minvalue 1 maxva...
    99+
    2022-10-18
  • MySQL中使用序列Sequence的方式总结
    目录前言方式一、使用存储过程一、创建一个包含自增主键的简单表。二、创建一个存储过程三、测试方式二、使用function一、创建一个生成sequence的函数二、测试总结前言 在oracle数据库中若想要一个连续的自增的数...
    99+
    2022-09-12
  • MySQL中怎么使用序列Sequence的方式
    这篇文章主要介绍“MySQL中怎么使用序列Sequence的方式”,在日常操作中,相信很多人在MySQL中怎么使用序列Sequence的方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2022-10-19
  • 在MySQL中创建实现自增的序列(Sequence)
    由于mysql和oracle不太一样,不支持直接的sequence,所以需要创建一张table来模拟sequence的功能,理由sql语句如下: 第一步:创建--Sequence 管理表 DROP...
    99+
    2022-10-18
  • Oracle中关于视图-序列-同义词-索引的详解
    一.视图 1.什么是视图  简单来说 视图就是一个虚拟表,实体表的映射       什么时候使用视图 在开发中,有一些表结构是不希望过多的人去接触,就把实体表映射为一个视图。(...
    99+
    2022-04-13
    Oracle中关于视图-序列-同义词-索引的详解
  • Oracle中的小序列
        话说序列很少人知道,因为Mysql和sql server都有自动增长字段(如ID主键自动增长的整数),而Oracle却没有提供该用法,那么Oracle提供了更...
    99+
    2022-10-18
  • Oracle中的sequence如何使用
    本篇内容介绍了“Oracle中的sequence如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!sequence是Oracle中的序列...
    99+
    2023-07-05
  • Java序列化和反序列化(详解)
    一、理解Java序列化和反序列化 Serialization(序列化):将java对象以一连串的字节保存在磁盘文件中的过程,也可以说是保存java对象状态的过程。序列化可以将数据永久保存在磁盘上(通常保存在文件中)。 deserializa...
    99+
    2023-09-11
    java 开发语言
  • 详解SpringBoot中时间类型的序列化与反序列化
    目录背景约定反序列化局部处理反序列化全局处理序列化局部处理全局处理推荐配置背景 前后端进行时间类型的传递时,往往是 前端传递时间格式的字符串,后端反序列化成对应的时间类型后端返回数据...
    99+
    2023-02-02
    SpringBoot时间类型序列化 反序列化 SpringBoot 序列化 反序列化 SpringBoot 序列化 SpringBoot 反序列化
  • Java对象的序列化与反序列化详解
    一、序列化和反序列化的概念把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化。对象的序列化主要有两种途径:Ⅰ . 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中Ⅱ.  在网络上传送对...
    99+
    2023-05-31
    java 序列化 反序列化
  • JavaIO之序列化与反序列化详解
    目录1、什么是序列化与反序列化?2、为什么要做序列化?3、Java 怎么进行序列化?总结1、什么是序列化与反序列化? 序列化:指把堆内存中的 Java 对象数据,通过某种方式把对象存...
    99+
    2022-11-13
  • oracle中sequence的用法是什么
    在Oracle数据库中,Sequence是一种生成递增数字序列的对象。它通常用于为表的主键字段提供唯一的值,以确保每次插入新记录时都...
    99+
    2023-09-23
    oracle
  • Go语言中序列化与反序列化示例详解
    目录前言序列化array、slice、map、struct对象序列化的接口反序列化slice、map、struct反序列化总结前言 Go语言的序列化与反序列化在工作中十分常用,在Go...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作