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

Oracle PLSQL无自增列场景下插入带连续递增id_no行的实现方案

Oracle PLSQL无自增列批量新增连续ID数据实现方案

适用场景

  • 目标表未设置自增主键、序列等自增特性
  • 新增数据的id_no字段需要从当前表最大值的下一位开始连续递增
  • name字段需要手动指定值
  • 示例场景:现有40条记录,需新增40条记录

实现方案1:PL/SQL匿名块(推荐,适合批量插入)

将代码中的你的实际表名替换为真实表名,手动填写需要新增的40个name值即可直接执行:

DECLARE
  v_max_id NUMBER;
  -- 定义存储name的数组,长度匹配需要新增的记录数
  TYPE name_list_type IS VARRAY(40) OF VARCHAR2(100);
  -- 手动填写所有需要新增的name值,按实际需求修改
  name_list name_list_type := name_list_type(
    '测试姓名1', '测试姓名2', '测试姓名3',
    -- 中间依次补充剩余36个name
    '测试姓名40'
  );
BEGIN
  -- 获取当前表最大id_no,表为空时默认从1开始
  SELECT NVL(MAX(id_no), 0) INTO v_max_id FROM 你的实际表名;
  
  -- 循环插入所有数据,id自动连续递增
  FOR i IN 1 .. name_list.COUNT LOOP
    INSERT INTO 你的实际表名 (id_no, name)
    VALUES (v_max_id + i, name_list(i));
  END LOOP;

  COMMIT;
EXCEPTION
  WHEN OTHERS THEN
    ROLLBACK;
    RAISE;
END;
/

实现方案2:单条INSERT语句(适合少量插入)

如果不想写匿名块,也可以逐行构造INSERT语句,执行完40条后统一提交即可:

-- 第1条新增数据
INSERT INTO 你的实际表名 (id_no, name)
VALUES ((SELECT NVL(MAX(id_no), 0) + 1 FROM 你的实际表名), '手动填写的姓名1');

-- 第2条新增数据
INSERT INTO 你的实际表名 (id_no, name)
VALUES ((SELECT NVL(MAX(id_no), 0) + 1 FROM 你的实际表名), '手动填写的姓名2');

-- 依次执行剩余38条语句后提交
COMMIT;

注意:单条插入方案在并发操作场景下可能出现ID重复问题,建议仅在独占表操作的低并发场景下使用。

内容的提问来源于stack exchange,提问作者Vanisri N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:54:01