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

Oracle SQL Developer中无需游标遍历表并插入数据的方法

Oracle无游标实现批量插入方案

前提说明

现有MainTable的定义中缺少期望结果里的ReservationId字段,需先添加该字段才能插入对应数据:

ALTER TABLE MainTable ADD ReservationId NUMBER;

批量插入实现(无游标)

使用Oracle的INSERT ... SELECT语句完成批量插入,这是集合式操作,无需游标即可批量处理数据:

方案1:用CASE匹配对应MainTableData值

如果MainTable的Id字段允许临时用ROWNUM生成自增ID,可直接执行:

INSERT INTO MainTable (Id, StatusTableId, ReservationId, MainTableData)
SELECT 
    ROWNUM,
    s.Id,
    1 AS ReservationId,
    CASE s.Id
        WHEN 11 THEN 'ancsd'
        WHEN 22 THEN 'dadsa'
        WHEN 33 THEN 'adasd'
    END AS MainTableData
FROM Status s
WHERE s.Id IN (11, 22, 33);

方案2:用序列生成持久化自增Id(适配Oracle 11g及更早版本)

若MainTable的Id字段需要持久化的自增逻辑,先创建序列:

CREATE SEQUENCE main_table_seq 
START WITH 1 
INCREMENT BY 1 
NOCACHE 
NOCYCLE;

再执行插入:

INSERT INTO MainTable (Id, StatusTableId, ReservationId, MainTableData)
SELECT 
    main_table_seq.NEXTVAL,
    s.Id,
    1 AS ReservationId,
    CASE s.Id
        WHEN 11 THEN 'ancsd'
        WHEN 22 THEN 'dadsa'
        WHEN 33 THEN 'adasd'
    END AS MainTableData
FROM Status s
WHERE s.Id IN (11, 22, 33);

补充说明

  • 上述方法均为集合操作,相比游标效率更高,无需逐行遍历处理
  • WHERE s.Id IN (11,22,33)确保只插入指定的Status记录
  • 若使用Oracle 12c及以上版本,可将MainTable的Id设为IDENTITY列,无需手动指定或创建序列,数据库会自动生成自增ID

内容的提问来源于stack exchange,提问作者soorya kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:31:31