You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 21c中使用Sequence优化批量Insert语句的方法

Oracle 21c 批量插入多行数据并自动生成序列主键

方案1:使用多行VALUES子句(Oracle 12c+支持)

直接在INSERT语句中编写多个VALUES组,序列的NEXTVAL会为每一行生成独立的主键值,无需重复编写INSERT和SELECT FROM dual。

INSERT INTO clinica_medica_t_convenios (id_cod_convenio, columna2, columna3, ...)
VALUES 
    (s_cod_convenios.NEXTVAL, 'valor2_1', 'valor3_1', ...),
    (s_cod_convenios.NEXTVAL, 'valor2_2', 'valor3_2', ...),
    (s_cod_convenios.NEXTVAL, 'valor2_3', 'valor3_3', ...);

这种写法简洁直观,每个VALUES组对应一行数据,序列每次调用NEXTVAL都会生成新的主键,确保每行的id_cod_convenio唯一。

方案2:使用INSERT ... SELECT ... UNION ALL 语法

如果需要兼容更早版本的Oracle,或需对插入数据做预处理,可通过子查询拼接多行数据后批量插入。

INSERT INTO clinica_medica_t_convenios (id_cod_convenio, columna2, columna3, ...)
SELECT 
    s_cod_convenios.NEXTVAL, 
    t.columna2, 
    t.columna3, 
    ...
FROM (
    SELECT 'valor2_1' AS columna2, 'valor3_1' AS columna3, ... FROM DUAL
    UNION ALL
    SELECT 'valor2_2' AS columna2, 'valor3_2' AS columna3, ... FROM DUAL
    UNION ALL
    SELECT 'valor2_3' AS columna2, 'valor3_3' AS columna3, ... FROM DUAL
) t;

子查询负责生成多行原始数据,外层SELECT调用序列NEXTVAL,确保每行获取唯一主键值,适合需要对数据做计算、转换的场景。

注意事项

  • 确保序列s_cod_convenios的增量和当前值符合业务需求,避免主键冲突。
  • 不要使用INSERT ALL语法处理序列主键场景:Oracle处理INSERT ALL时只会执行一次序列递增,导致所有行共用同一个主键值,不符合需求。

内容的提问来源于stack exchange,提问作者Fred K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:22:33