ORACLE 自增序列SEQUENCE

ORACLE 按自增序列sequence更新表 @TOC SEQUENCE Oracle创建序列化: CREATE Sequence myseq INCREMENT BY 1 -- 每次加1 START WITH 2008500009 -- 从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10; oracle删除序列化 DROP SEQUENCE myseq; Oracle修改序列化 如果想要改变初始值,必须 drop sequence 再重新 create 阅读详情


在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
1、Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10;

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

可以使用sequence的地方:
- 不包含子查询、snapshot、VIEW的 SELECT 语句
- INSERT语句的子查询中
- NSERT语句的VALUES中
- UPDATE 的 SET中

可以看如下例子:
INSERT INTO emp VALUES
(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);

SELECT empseq.currval FROM DUAL;

但是要注意的是:
- 第一次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防止这种情况。

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数目。

可以很简单的Drop Sequence
DROP SEQUENCE order_seq;

示例Sequence:
CREATE SEQUENCE SCOTT.DMIFPOSTID
    START WITH 261
    INCREMENT BY 1
    NOMINVALUE
    NOMAXVALUE
    NOCYCLE
    CACHE 20
    NOORDER

3、如何使用
         第一种方法:一般来说需要新建一个触发器(TRIGGER),使得在插入数据之前先运行Sequence生成自增号。
示例Trigger
CREATE OR REPLACE TRIGGER SCOTT.DMIFATTACH_TRG
BEFORE INSERT
ON SCOTT.DMIFATTACH
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
begin
    select SCOTT.DMIFATTACHID.nextval into :new.ATTACHID from dual;
  end;
         第二种方法:可以在插入数据时直接调用。
          insert into table(id,name) values(seq_name.nextval,'名字');

         其它:对于hibernate来说,在插入数据之前会先运行一次Sequence生成id的,所以这时如果还有触发器(TRIGGER),又要再运行一次Sequence,于是就会发现id是以2为步进增加的。这时把Trigger删除,步进就为1了。
         如果使用hibernate则需要在hbm.xml文件中把ID的生成方式设为sequence.
    <id
        name="postid"
        type="java.lang.Integer"
        column="POSTID"
    >
        <meta attribute="field-description">
           @hibernate.id
            generator-class="sequence"
            type="java.lang.Integer"
            column="POSTID"


        </meta>
        <!--设置id生成方式-->
          <generator class="sequence">
            <param name="sequence">SCOTT.DMIFPOSTID</param>
         </generator>
    </id>
同时在调用this.getHibernateTemplate().save()方法时会自动生成根据sequence把查询到的id号set给这个对象的id.

要查看已创建的Sequence,执行的语句是:

SQL代码  select * from user_sequences;  
其中返回的SEQUENCE_NAME为序列名,LAST_NUMBER为当前值
要取得下一ID,可以使用:
SQL代码  select  序列名.nextval from 表名  
这个语句会返回多个序列号(会被缓存起来),要取得一个序号,表名使用dual(虚表)即可
ORACLE操作XML函数 XMLTYPE_instance:XML数据类型的字段,用于保存XML ,XPath_string:操作的节点路径,例如:/info/Owner。 绝对路径与相对路径:区别在于路径字符串最前面的斜杠是否存在,有斜杠代表绝对路径,没有斜杠则是相对路径 指定路径中相同元素中的某个元素:“/info/Owner[2]”,代表第2个Owner元素JACK。 立即下载

相关推荐

ArcGIS中如何计算多个点到特定线的最短距离

现有一个点图层和一个面图层,怎么来计算这些点到这个面图层,两个面的公共边的最短直线距离呢? 1.首先得将两个图层都转为 投影坐标系 打开工具箱-数据管理工具-要素-面转线 ​ ​ 2.将面图层设为输入要素 注意要将“识别和存储面邻域信息”勾选 ​ 3.面转线成功后 打开线属性表,线图层拥有了 LEFT_FID和RIGHT_FID两个字段 ​ 4.按属性选择,表达式中输入 “LEFT_FID”<>-1 即可选出两个面的公共边 ​再将选...

GIS蒲公英的博客 6715

ORACLE SEQUENCE在xml中的实现

select SEQ_student_ID.NEXTVAL from dual insert into BASE_REGIST_RADIO id, name,         #{id,jdbcType=INTEGER},               #{name},           这样即可

One__PieceLufei的博客 885

HDMI2.1/eDP TX接口设计:

HDMI2.1向下兼容,HDMI2.1工作在FRL模式,HDMI2.0工作在TMDS模式。因此采用AC耦合电压模式驱动器。一般采用220nF,封装建议0201。,但是协议要求,往 CEC 管脚通过 27K 电阻加 3.3V 电压,漏电不允许超过。NOTE:如果只需要支持 HDMI2.0 及以下模式时, MOS管也不能省掉。DDC_SCL/DDC_SDA 协议规定是。HDMI2.0模式:配置为高,MOS导通。HDMI2.1模式:配置为低,MOS不导通。,必须增加电平转换电路。形成直流偏置,大约3V。

qq_40010777的博客 7862

oracle xmltable 序列,ORACLE xml解析 xmltable和XMLSEQUENCE解析xml

DECLARE--xml字符串v_query VARCHAR2(2000) := '-1SELECT TEST_TB_HXQ.ID FROM TEST_TB_HXQ,USERS a2,C_STOREGRADE a1,TEST_DET a0 WHERE ( (TEST_TB_HXQ.AD_CLIENT_ID=37) ) AND (a0.ID (+)=TEST_TB_HXQ.DBUSER) AND (...

weixin_34246598的博客 1162

LC整流滤波电路DIY:电感电容配合,手把手搭建低纹波直流电源

在直流电源设计中,整流滤波是连接交流输入与稳定输出的关键环节。常见的电容滤波虽然简单,但在大负载下纹波抑制能力有限,电感抵抗电流突变、电容抵抗电压突变,二者组合构成的LC滤波能有效降低输出电压纹波,同时减小开机浪涌电流。在工频线性电源、功放电源等对噪声敏感的场景中,LC滤波常作为稳压前的平滑缓冲。本文以一套完整DIY项目为线索,介绍整流桥后串联功率电感、并联滤波电容的电路构成,结合实际计算与波形测试,讨论电感量估算、电容选取、谐振风险、饱和电流等工程问题,并给出上电测试和故障排查方法。通过搭建与调试,可直观

weixin_29168813的博客 378

CanOpen PDO映射实战:从原理到配置的完整指南

本文详细解析了CanOpen PDO映射的原理与配置流程,从基础通信机制到实战配置步骤,涵盖禁用PDO、清空映射、逐项映射和使能PDO等关键环节。特别针对西门子G120变频器、台达伺服和倍福CX控制器等不同厂商设备,提供了具体的配置技巧和常见问题排查指南,帮助工程师快速掌握多厂商设备间的PDO通信配置。

weixin_30718391的博客 517

oracle怎么创建自增长,oracle自增列创建方法收藏

oracle自增列创建方法收藏Oracle没有自增字段这样的功能,但是通过(trigger)和序列(sequence)可以实现。先建一个测试表了:create table userlogin(id number(6) not null,name varchar2(30) not null primary key)tablespace users/第一步:创建SEQUENCEcreate...

weixin_33895652的博客 1100

addBumpConnectTargetConstraint 命令详解

本文介绍了Cadence Innovus中用于倒装芯片设计的addBumpConnectTargetConstraint命令的核心功能和使用方法。该命令主要用于为凸点(Bump)添加连接目标约束,通过绑定实例、引脚/网络和端口号等属性,实现凸点与电源/信号网络的精准映射。文章详细解析了命令语法结构、参数说明及使用场景,包括必选参数(指定凸点方式)、分支选择(实例连接或电源连接类型)以及互斥参数(引脚名与网络名)等重要注意事项,并提供了典型应用示例。该命令特别适用于倒装芯片设计中凸点与PG网络、IO实例的连接

u013620135的博客 394

Oracle数据库如何实现自增-序列Sequence介绍(适合小白)

Oracle数据库中的Sequence是一种非常方便且实用的数据库对象,它可以生成一组等间隔的数值序列,常被用于为表中的行自动生成主键值等唯一标识符。Oracle数据库中的Sequence是一种特殊的数据库对象,可以生成一组等间隔的数值,常用于为表中的行自动生成序列号。Oracle数据库中的Sequence是一种非常有用的数据库对象,它可以帮助生成一组等间隔的数值,并且常常被用于为表中的行自动生成序列号。插入语句引用:在插入数据时,可以使用Sequence的当前值作为表中的某些列的值。

男神的专栏 3297

BLDC&PMSM电机控制器硬件设计工程(一)概述&需求&规划

这里是一个专注于电机控制器硬件工程的开放社区与知识仓库。我们的核心使命是分享、交流与共创,致力于解开无刷直流电机(BLDC)和永磁同步电机(PMSM)中、大功率控制器硬件设计,包括驱动IC选型,电流传感器选型,控制IC,母线电容计算,功率模块(IGBT、MOS管)选型以及大功率功率模块驱动电源设计。功率等级: 重点关注中等功率(如500W-10kW) 并向大功率(10kW以上) 延伸,探讨对应的功率器件(如MOSFET, IGBT, SiC)选型与驱动。

小幽余生不加糖 638

【STM32 CubeMX】I2C中断方式与DMA方式

在STM32 CubeMX环境中,I2C(Inter-Integrated Circuit)通信协议的实现可以采用中断方式或DMA(Direct Memory Access)方式。中断方式通过触发中断来处理数据传输,而DMA方式则利用直接内存访问技术来实现数据传输,减轻了CPU的负担。在选择I2C通信方式时,开发者需要根据具体的应用需求和性能要求来选择合适的方式。STM32 CubeMX提供了图形化配置工具,使得配置I2C通信方式变得更加便捷。

m0_62599305的博客 7749

oracle如何实现自增?----用序列sequence的方法来实现

<br />将表t_user的字段ID设置为自增:(用序列sequence的方法来实现)<br />----创建表<br />Create  table  t_user(<br />Id number(6),userid varchar2(20),loginpassword varchar2(20),isdisable number(6)<br />);<br />----创建序列<br />create sequence user_seq<br />increment by 1 <br />start w

hu_shengyang的专栏 2万+

【OpenClaw从入门到精通】第11篇:OpenClaw 2026多模态实战全攻略:OCR/语音/图像自动化(附完整代码+双部署方案)

本文聚焦OpenClaw 2026版核心升级的多模态能力,从底层架构原理到实操落地全流程拆解。先解析“统一指令解析+多工具适配器”的核心设计逻辑,再提供阿里云规模化部署(适合批量任务)与本地汉化版部署(适合隐私数据调试)的详细步骤,含依赖安装、配置验证完整操作;随后落地三大高频实战场景——OCR合同信息结构化提取、会议录音自动转写纪要、电商商品图片智能打标,每个场景均提供可直接运行的完整代码、执行结果演示及流程说明;最后补充多模态任务避坑指南、性能优化技巧与成本控制方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2612

oracle数据库主键自增序列_Oracle数据库主键自增的两种方式(SEQUENCE和触发器)

1.准备工作创建Oracle数据库表,用户表 SYS_USERS 其中user_id为主键-- Create tablecreate table SYS_USERS(user_id NUMBER(9) not null,user_name VARCHAR2(20) not null,user_pwd VARCHAR2(20) not null,full_name VARCHA...

weixin_34565946的博客 690

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Oracle中的有序自增字段——序列sequence

序列是Oracle提供的用于产生一组等间隔整型数值的数据库对象,可以通过在插入语句中引用序列值来实现主键自增。 创建sequence: Oracle用CREATE SEQUENCE命令创建序列,格式如下: CREATESEQUENCEseq_name//seq_...

chuanao8829的博客 376

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Oracle序列(SEQUENCE)实现每日自增流水号

Oracle序列(SEQUENCE)实现每日自增流水号

southdreams的博客 2012

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

oracle sequence 自动自增序列

Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍 收藏 先假设有这么一个表: create table S_Depart ( DepartId INT not null, DepartName NVARCHAR2(40) not null, DepartOrder INT default 0, constraint PK_S_DEPART primary key (Depar...

ma112000ren的博客 191

Oracle中的自增-序列-SEQUENCE

Oracle 12c 之前的版本都没有自增列,如果需要使用自增列,则需要借助SEQUENCE. DROP TABLE CUSTOMERORDER PURGE; CREATE TABLE CUSTOMERORDER ( ORDERID NUMBER NOT NULL, PRODUCTID NUMBER, PRODUCTNAME...

weixin_30300523的博客 108

oracle自增序列带字母,Oracle中的有序自增字段——序列sequence

序列是Oracle提供的用于产生一组等间隔整型数值的数据库对象,可以通过在插入语句中引用序列值来实现主键自增。创建sequence:Oracle用CREATE SEQUENCE命令创建序列,格式如下:CREATESEQUENCEseq_name//seq_name是序列的名字。[STARTWITHstart]//用来制定序列的起始值。...

weixin_34697150的博客 468
上一篇: Hibernate中引用View的解决方案_来自一网友
下一篇: 在Visual C++中用ADO进行数据库编程
memory_xj
博客等级 码龄24年 44粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值