Oracle SQL教程:使用游标FOR循环执行批量新增与删除操作

Oracle利用游标For循环根据查询结果固定数值循环新增、删除SQL脚本写法,因修改脚本可以使用正常的UPDATE语句进行修改故未进行记录。

一、单表根据数值循环新增、删除

---单表增加10000条数据---
DECLARE
    i NUMBER;
--开始I循环-结束循环
BEGIN
    FOR i IN 1..10000
        LOOP --对应的Instr语句 注意将ID的值换为变量i
--DB.TABLE为表名 ID为主键
            INSERT INTO DB.TABLE (ID, NAME)
            VALUES (i, '测试');
--事务提交
            COMMIT;
--结束循环
        END LOOP;
--结束
END;


---单表删除10000条数据---
DECLARE
    i NUMBER;
--开始I循环-结束循环
BEGIN
    FOR i IN 1..10000
        LOOP
            --对应的DELETE语句 注意将ID的值换为变量i
            DELETE
            FROM DB.TABLE --表名
            WHERE ID = i; --主键ID
--事务提交
            COMMIT;
--结束循环
        END LOOP;
--结束
END;

二、多表关联根据数值循环新增、删除

---多关联表主表增加10000条数据---
DECLARE
    i NUMBER;
--开始I循环-结束循环
BEGIN
    FOR i IN 1..10000
        LOOP --对应的Instr语句 注意将ID的值换为变量i
--DB.TABLE为主表表名 ID为主表主键
            INSERT INTO DB.TABLE (ID, NAME)
            VALUES (i, '测试');
---多关联表子表增加10000条数据---
            DECLARE
                k NUMBER;
--开始k循环-结束循环
            BEGIN
                FOR k IN 1..10000
                    LOOP --对应的Instr语句 注意将SID的值换为变量k
--DB.STABLE为关联表表名 SID为关联表主键 ID为主表主键
                        INSERT INTO DB.STABLE (SID,
                                               ID,
                                               NAME)
                        VALUES (i || 'SID' || k, --防止循环导致子表主键冲突
                                i, '测试');
--结束循环
                    END LOOP;
--结束
            END;
--事务提交(主表与子表一起进行事务提交)
            COMMIT;
--结束循环
        END LOOP;
--结束
END;


---多关联表主表删除10000条数据---
DECLARE
    i NUMBER;
--开始I循环-结束循环
BEGIN
    FOR i IN 1..10000
        LOOP --对应的DELETE语句 注意将ID的值换为变量i
--DB.TABLE为主表表名 ID为主表主键
            DELETE
            FROM DB.TABLE
            WHERE ID = i;
---多关联表子表删除10000条数据---
            DECLARE
                k NUMBER;
--开始k循环-结束循环
            BEGIN
                FOR k IN 1..10000
                    loop --对应的DELETE语句 注意将SID的值换为变量k
--DB.STABLE为关联表表名 SID为关联表主键
                        DELETE
                        FROM DB.STABLE
                        WHERE SID = k;
--结束循环
                    END LOOP;
--结束
            END;
--事务提交(主表与子表一起进行事务提交)
            COMMIT;
--结束循环
        END LOOP;
--结束
END;

 三、单表根据查询结果循环新增

---单表根据查询结果循环新增数据---
---根据查询条件的字段名和类型进行定义 本次举例为ID主键 类型为VARCHAR2类型 长度自定义---
DECLARE
    ID VARCHAR2(64);
--开始I循环-结束循环
BEGIN
    --objectVo 定义对象
    FOR objectVo IN ( SELECT ID FROM DB.TABLE WHERE ID IS NOT NULL ) --正常的查询SQL
        LOOP
            --对应的Instr语句 注意将ID的值换为变量i
            ID := objectVo.ID;
            --在进行新增语句执行前进行字段定义及赋值
--DB.TABLE为表名 ID为主键
            INSERT INTO DB.TABLE (ID, NAME)
            VALUES (ID, '测试');
--事务提交
            COMMIT;
--结束循环
        END LOOP;
--结束
END;

 四、单表根据查询结果循环新增及子表根据数值循环新增

---单表根据查询结果循环新增及子表根据数值循环新增---
---根据查询条件的字段名和类型进行定义 本次举例为ID主键 类型为VARCHAR2类型 长度自定义---
DECLARE
    ID VARCHAR2(64);
--开始I循环-结束循环
BEGIN
    --objectVo 定义对象
    FOR objectVo IN (
        SELECT ID
        FROM DB.TABLE
        WHERE ID IS NOT NULL ) --正常的查询SQL
        LOOP
            --对应的Instr语句 注意将ID的值换为变量i
            ID := objectVo.ID;
            --在进行新增语句执行前进行字段定义及赋值
            --DB.TABLE为表名 ID为主键
            INSERT INTO DB.TABLE (ID,
                                  NAME)
            VALUES (ID,
                    '测试');
---多关联表子表增加10条数据---
            DECLARE
                k NUMBER;
--开始k循环-结束循环
            BEGIN
                FOR k IN 1..10
                    LOOP --对应的Instr语句 注意将SID的值换为变量k
                --DB.STABLE为关联表表名 SID为关联表主键 ID为主表主键
                        INSERT INTO DB.STABLE(SID,
                                              ID,
                                              NAME)
                        VALUES (i || 'SID' || k, --防止循环导致子表主键冲突
                                ID,
                                '测试');
--结束循环
                    END LOOP;
--结束
            END;

--事务提交(主表与子表一起进行事务提交)
            COMMIT;
--结束循环
        END LOOP;
--结束
END;
  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值