存储过程中使用显式游标的思考

liubin041102 liubin041102 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
隐式游标使用一般是for rec in (select * from xxxx),这种方式广泛被认可。
而显示游标(open - close)的使用有些争议,效率不高,内存泄露等问题。
1.效率问题
a.如果数据量不大,并且一个sql能完成的功能,是没必要使用游标
b.数据量巨大,即使简单的update也会卡到死,我会考虑使用游标循环处理(包括隐式和显式游标);又引出一个话题,如果对巨量数据做更新做优化?使用批量更新,循环把数据放到数组里,然后每1万条update一次?循环update,每一万条commit一次?创建临时表,给每行编行号,然后 使用行号做限制条件一万条处理一次?如果有好的建议请不要吝啬
例如:如果表t1有5千万条数据,更新到表t2中,对t1来讲是每条数据都需要处理,怎么办?

2.内存问题
a.open 的游标,使用之后close,这样还有内存泄露么?我不知道,坐等回复
b.有人说使用游标之后数据库变慢了,内存占用的多了,这个怎么解释
...全文

相关推荐

sqlserver游标存储过程的使用

NULL 博文链接:https://gz383.iteye.com/blog/635513

weixin_38669628

详解Oracle隐式游标和显式游标

游标是什么?就是在内存开辟的一块临时存储空间。 1.Oracle隐式游标 1.1Oracle有常用的哪些隐式游标 1.2 Oracle隐式游标演示 -- 隐式游标 (使用的表为Oracle默认自带的emp表) -- sql%rowcount:影响记录条数 sql%found:是否有满足条件的记录 set serveroutput on; declare v_ename a_emp.ename%type; begin select ename into v_ename from a_emp where empno=7788; if sql%found then dbms_output.p

weixin_38735790

navicat中创建存储过程、触发器和使用游标的简单实例(图文)

主要介绍了navicat中创建存储过程、触发器和使用游标的简单实例,需要的朋友可以参考下

weixin_38705640

Oracle存储过程游标用法分析

本文实例讲述了Oracle存储过程游标用法。分享给大家供大家参考,具体如下: 使用游标的5个步骤 1、声明一些变量用于保存select语句返回的指 2、声明游标,并指定select 语句 3、打开游标 4、从游标中获取记录 5、关闭游标 从游标中获取每一条记录可使用fetch语句。fetch语句将列的指读取到指定的变量中; 语法: fetch cursor_name into variable[, variable ...]; 例子: create or replace procedure sel_person is v_id person.id%type; v_name person.

weixin_38621624

Oracle显示游标的使用及游标for循环

下面给大家介绍在什么情况下用隐式游标,什么情况下用显示游标: 1.查询返回单行记录时→隐式游标; 2.查询返回多行记录并逐行进行处理时→显式游标 –显示游标属性 declare CURSOR cur_emp IS SELECT * FROM emp; row_emp cur_emp%ROWTYPE; BEGIN OPEN cur_emp; FETCH cur_emp INTO row_emp; WHILE cur_emp%FOUND LOOP dbms_output.put_line(row_emp.empno||'----'||row_emp.ename); FETCH cur_emp

weixin_38660069
评论 4
收藏 已收藏
分享
返回顶部
liubin041102
Oracle 高级技术 3,499 成员 18,710 内容