oracle中游标遍历更新数据1W条一个commit;

laoshangcsdn 2017-03-14 06:44:59
我准备在oracle中使用游标遍历的方式将user1用户下的test1表scycjg字段update为'0' 现在要求我1W条提交一次,不用逐条commit; 请各位大神帮忙改一下脚本来实现,谢谢!!!


DECLARE
CURSOR UPDATE_CURSOR IS
select id from user1.test1
where sc_updated_date < to_date('2016-7-01','yyyy-mm-dd');
T_ROW UPDATE_CURSOR%ROWTYPE;
BEGIN
OPEN UPDATE_CURSOR;
LOOP
FETCH UPDATE_CURSOR INTO T_ROW;
EXIT WHEN UPDATE_CURSOR%NOTFOUND;
update user1.test1
set c
where id=t_row.id;
END LOOP;
CLOSE UPDATE_CURSOR;
END;
...全文
1621 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
韩辰溪_ 2019-12-02
  • 打赏
  • 举报
回复
引用 5 楼 qq_41538240 的回复:
[quote=引用 3 楼 laoshangcsdn 的回复:] 感谢,已经可以了!! 修改后的如下 可以参考下 DECLARE CURSOR UPDATE_CURSOR1 IS select id from user1.table1; T_ROW1 UPDATE_CURSOR1%ROWTYPE; row_num1 int := 0; BEGIN OPEN UPDATE_CURSOR1; LOOP FETCH UPDATE_CURSOR1 INTO T_ROW1; EXIT WHEN UPDATE_CURSOR1%NOTFOUND; update user1.table1 set x='0' where id=t_row1.id; row_num1:=row_num1 + 1; if row_num1=10000 then commit; row_num1:= 0; end if; commit; END LOOP; CLOSE UPDATE_CURSOR1; END;
end if后面的commit不还是会循环执行吗[/quote]最后的commit应该写在循环外吧
韩辰溪_ 2019-12-02
  • 打赏
  • 举报
回复
引用 3 楼 laoshangcsdn 的回复:
感谢,已经可以了!! 修改后的如下 可以参考下 DECLARE CURSOR UPDATE_CURSOR1 IS select id from user1.table1; T_ROW1 UPDATE_CURSOR1%ROWTYPE; row_num1 int := 0; BEGIN OPEN UPDATE_CURSOR1; LOOP FETCH UPDATE_CURSOR1 INTO T_ROW1; EXIT WHEN UPDATE_CURSOR1%NOTFOUND; update user1.table1 set x='0' where id=t_row1.id; row_num1:=row_num1 + 1; if row_num1=10000 then commit; row_num1:= 0; end if; commit; END LOOP; CLOSE UPDATE_CURSOR1; END;
end if后面的commit不还是会循环执行吗
ericoller 2018-08-02
  • 打赏
  • 举报
回复
怎么报错呀求完整解答
laoshangcsdn 2017-03-15
  • 打赏
  • 举报
回复
感谢,已经可以了!! 修改后的如下 可以参考下 DECLARE CURSOR UPDATE_CURSOR1 IS select id from user1.table1; T_ROW1 UPDATE_CURSOR1%ROWTYPE; row_num1 int := 0; BEGIN OPEN UPDATE_CURSOR1; LOOP FETCH UPDATE_CURSOR1 INTO T_ROW1; EXIT WHEN UPDATE_CURSOR1%NOTFOUND; update user1.table1 set x='0' where id=t_row1.id; row_num1:=row_num1 + 1; if row_num1=10000 then commit; row_num1:= 0; end if; commit; END LOOP; CLOSE UPDATE_CURSOR1; END;
jdsnhan 2017-03-14
  • 打赏
  • 举报
回复
真没必要阶段性提交,那不会提高效率的。网络上常说的,阶段性提交,可以提高效率都是错的
卖水果的net 2017-03-14
  • 打赏
  • 举报
回复
i:= 0; loop exit when … i:= i +1; if i =10000 then commit; i := 0; end if; end loop; commit;

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧