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;