问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

oracle存储过程循环执行SQL语句

发布网友 发布时间:2022-04-29 15:03

我来回答

4个回答

热心网友 时间:2022-04-08 07:09

实现方式错了,批量移动数据应该使用Cursor,而不是像分页那样每次都查询。
每次都查询可能会导致重复数据。
正确方式应该是打开一个Cursor,循环Cursor来插入,使用计数器来控制每次COMMIT的行数:
declare
TYPE R_CURSOR IS REF CURSOR;
i number;
a1_cursor R_CURSOR;
a1_row A1%ROWTYPE;
begin
open a1_cursor FOR
select ID, NAME from A1;
i := 0;
loop
fetch a1_cursor
into a1_row;
exit when a1_cursor%notfound;
INSERT INTO A2 VALUES a1_row;
i := i + 1;
if i >= 5 then
commit;
i := 0;
end if;
end loop;
close a1_cursor;
commit;
end;

热心网友 时间:2022-04-08 08:27

declare
sql_tem Varchar2(4000);
a number;
b number;
i number;
begin
a := 1;
for i in 1 .. 3 loop
b := a + 4;
sql_tem := 'insert into A2 (ID,NAME) (select ID,NAME from A1 WHERE ROWNUM between :1 and :2)';

EXECUTE IMMEDIATE sql_tem
USING a, b;
commit;
a := a + 5;
end loop;
end;

试试上面的代码看一下能不能满意你的要求先呗。。。追问还是不行,效果还是一样的只是插入了1-5,后面都没有,只要a,b变化了 ,就不执行了

追答改成下面的试一下,原因是 Oracle的伪列rownum不支持>,>=,=,between...and
declare
sql_tem Varchar2(4000);
a number;
b number;
i number;
begin
a := 1;
for i in 1 .. 3 loop
b := a + 4;
sql_tem := 'insert into A2 (ID, NAME) (select ID,NAME from (select a.*, rownum as RN from B2B_BC_TXN_ORDER_log a where rownum = :2)';

EXECUTE IMMEDIATE sql_tem
USING b, a;
commit;
a := a + 5;
end loop;
end;

热心网友 时间:2022-04-08 10:01

a := a + 5;

b := b + 5;

原来的a := a + b; 有问题
b := b + 5;

热心网友 时间:2022-04-08 11:53

commit;
a := a + 5;
b := b + 5;
end loop;

改成这样即可。
for i in 1..8 loop
a=1 b=5
a=6 b=10
a=11 b=15
a=16 b=20
a=21 b=25
a=26 b=30
a=31 b=35
a=36 b=40
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
单位高温防护欠缺致员工中暑如何对待 狗狗为什么爱看视频 360浏览器怎么设置倍速播放 ...先讲女主的灵魂飘荡了一段时间,然后重生,请问是那本? 拯救者散热器怎么开 电脑如何一键还原系统电脑一键还原怎么操作 神舟笔记本电脑怎么重新设置神舟战神bios恢复出厂设置 神舟电脑恢复出厂设置神舟战神怎么恢复原厂系统 水泥楼梯如何铺木楼梯 家里面楼梯是水泥的不想铺地毯或者地砖还能铺什么 电脑做表格时,怎样删除一个字? 招联金融办理贷款需要办理会员吗? 360借条怎么解除绑定手机 电脑的远程控制在那里?怎样发送给别人? 招联金融学生可以借款吗 三星C7手机怎么设置红包提醒弹出桌面功能? 三星C7手机红包助手已经打开为什么不会弹出红包提醒呢? 招联金融我贷款吗 三星手机抢微信红包声音提示怎样设置 三星SM_A7108手机如何设置红包提示音? 三星红包提醒怎么设置 三星S6edge+手机怎么设置红包提醒? 一篇“骨气”演讲 在杀人犯审判法庭上殴打杀人犯会不会犯法? 怎么才能做一个有骨气的男孩? 怎样做才是一个有骨气的中学生? 张家港市润华机械厂怎么样? 什么是骨气? 怎样才算有 骨气`?? 如何做到穷的有骨气? 227300元个人所得税多少钱 Oracle 存储过程内部如何执行一个sql语句 oracle存储过程中执行sql语句 oracle 存储过程中的语句 oracle 利用存储过程循环执行sql语句? 蜘蛛匕首怎么一次招20只 在oracle中执行SQL语句 oracle存储过程怎么判断一条sql语句是否成功 oracle 如何用存储过程来执行查询出来的语句? 养生壶盖子打不开? 我想定时让 oracle 执行一段sql语句 怎么做 在oracle中创建一个存储过程,来循环获取 a表中存放的查询sql语句 并一... oracle存储过程中执行查询sql语句报错 《流放之路》召唤师的召唤物击杀怪物有球得吗? oracle SQL语句中怎么样调用存储过程? oracle 存储过程是用什么系统变量返回sql语句的执行结果的 流放之路清理蜘蛛任务怎么做? 流放之路的召唤灵体的技能珠怎么得 为什么洗衣机洗衣服到一半突然跳的厉害? 小天鹅洗衣机在最后几分钟的时间老是来回跳动,不脱水是什么原因? 滚筒洗衣机跳闸的原因