oracle自动生成序列号,批量insert,解决ORA-02287

文章讲述了在Oracle数据库中,由于需要补全表中缺失的数据,尝试使用序列自动生成ID时遇到错误。通过分析,发现原因是不能在UNION内部使用序列号。解决方案是将序列生成部分提取到UNION外部,成功完成了数据插入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

oracle 数据库,某个表中发现缺失了一批数据,需要补全近半年的。
由于是固定的数据,只是日期差异,决定批量insert

表中使用了序列自动生成ID

问题描述

以下方法都试过,都报错

方法1:
INSERT ALL
INTO my_table (id, data_column) VALUES (my_sequence.NEXTVAL, ‘Data 1’)
INTO my_table (id, data_column) VALUES (my_sequence.NEXTVAL, ‘Data 2’)
INTO my_table (id, data_column) VALUES (my_sequence.NEXTVAL, ‘Data 3’)
SELECT * FROM dual;
此方法不行,会报错

方法2:
INSERT INTO my_table (id, data_column)
select id, data_column from (
SELECT my_sequence.NEXTVAL as id, ‘Data 1’ as data_column FROM dual
UNION
SELECT my_sequence.NEXTVAL as id, ‘Data 2’ as data_column FROM dual
UNION
SELECT my_sequence.NEXTVAL as id, ‘Data 3’ as data_column FROM dual
) ;
报错:ORA-02287:sequence number not allowed here


原因分析:

ORA-02287:sequence number not allowed here
ORA-02287:此处不允许有序列号

查了资料发现:需要把my_sequence.NEXTVAL提到UNION的外层


解决方案:

把生成序列提出来,不在UNION那层,便成功自动生成ID

INSERT INTO my_table (id, data_column)
select my_sequence.NEXTVAL as id, dt.*
from (
SELECT ‘Data 1’ as data_column FROM dual
UNION
SELECT ‘Data 2’ as data_column FROM dual
UNION
SELECT ‘Data 3’ as data_column FROM dual
) dt

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值