Oracle执行插入语句报错:ORA-02289: 序列不存在

一、问题描述

    Oracle中执行插入语句报错:【ORA-02289: 序列不存在】

//这就是报错的插入语句
insert into ScadaDeviceList (DeviceId, DeviceNumber) values (SEQ_DeviceList.NextVal,'SCADA01')

二、问题分析

    分析:当前执行的插入语句中用到了自增序列,但是数据库中没有创建自增序列【SEQ_DeviceList】。

三、解决办法

    直接创建自增序列【SEQ_DeviceList】即可,执行语句如下:

CREATE SEQUENCE SEQ_DeviceList
 START WITH 80
 INCREMENT BY 1
 NOMINVALUE
 MAXVALUE 9999999999999999999999999
 NOCYCLE
 NOORDER
 CACHE 100;

四、补充知识

4.0、序列介绍

    序列【sequence】是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。其主要的用途是生成表的主键值。

4.1、查看所有序列

//查看所有序列
select * from user_sequences

4.2、创建序列

①必须具备:创建序列的权限 create sequence 或 create any sequence;

②创建序列的语法

CREATE SEQUENCE sequenceName  //创建的序列名称

       [START WITH n]    //开始的值,递增默认是minvalue 递减是maxvalue

       [INCREMENT BY n]  //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1

       [{MAXVALUE n | NOMAXVALUE}] //最大值

       [{MINVALUE n | NOMINVALUE}] //最小值

       [{CYCLE | NOCYCLE}] //循环/不循环一直累加到最大值

       [{CACHE n | NOCACHE}];//分配并存入到内存中


Cycle 循环 nocycle 不循环

Cache 缓存   //一般不采用缓存

Nextvalue 下一个

Currval 当前值

③示例:创建名为【SEQ_DeviceList】的序列,从80开始,每次增加1,没有最小值;最大值为:999999,不循环,分配100个存入内存中。

CREATE SEQUENCE SEQ_DeviceList
 START WITH 80
 INCREMENT BY 1
 NOMINVALUE
 MAXVALUE 999999
 NOCYCLE
 NOORDER
 CACHE 100;

4.3、删除序列

//删除指定名称的序列
DROP sequence 序列名称

4.4、使用场景

①INSERT语句的VALUES中

//插入语句中的DeviceId使用自增序列
insert into ScadaDeviceList (DeviceId, DeviceNumber) values (SEQ_DeviceList.NextVal,'SCADA01')

②UPDATE 的 SET中

UPDATE ScadaDeviceList SET DeviceId=SEQ_DeviceList.Currval WHERE DeviceNumber= 'SCADA01' 
  • 9
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛奶咖啡13

我们一起来让这个世界有趣一点…

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值