一直以为以下这种语句(执行一)就是隐式游标,跟显式定义游标(执行二)运行速度差不了多少。为方便简单起见,我通常都是用执行一的方式来写循环操作,数据量较小没有觉得有什么,只到有一天,一个海量数据的更新运行了一晚上都没出来结果,才知道自己犯了多大的错误:
执行一:
begin
for c in (
select ca.org_code, m.material_code, sum(cd.num) ammount
from mas_admin.ASC_STOCK_CHANGE_BILL c
join mas_admin.ASC_STOCK_CHANGE_DETAIL cd on c.STOCK_CHANGE_BILL_ID =
cd.STOCK_CHANGE_BILL_ID
join mas_admin.asc_materiel m on m.materiel_id = cd.MATERIAL_ID --物料表
join mas_admin.asc_stock s on s.STOCK_ID = c.STOCK_ID
join mas_admin.asc_agent ca on ca.ORG_ID = s.org_id
where c.ENABLE_FLAG = 'Y'
and s.STOCK_TYPE_ID = 1
and c.BILL_STATE = 3
and substr(ca.org_code, 1, 3) <> 'BAK'
and c.STOCK_CHANGE_REASON_ID=3 -- 3=系统错误
group by ca.org_code, m.material_code
) loop
update asc_ca_stock_good_usable
set ADJUST_NUM_ERROR=c.ammount
where ORG_CODE=c.org_code and MATERIAL_CODE=c.MATERIAL_CODE and action_date=curr_date;
end loop;
commit;
end;
执行二:
declare
var_org_code varchar2(50);
var_material_code varchar2(50);
var_ammount number;
cursor c is
select ca.org_code, m.material_code, sum(cd.num) ammount
from mas_admin.ASC_STOCK_CHANGE_BILL c
join mas_admin.ASC_STOCK_CHANGE_DETAIL cd on c.STOCK_CHANGE_BILL_ID =
cd.STOCK_CHANGE_BILL_ID
join mas_admin.asc_materiel m on m.materiel_id = cd.MATERIAL_ID --物料表
join mas_admin.asc_stock s on s.STOCK_ID = c.STOCK_ID
join mas_admin.asc_agent ca on ca.ORG_ID = s.org_id
where c.ENABLE_FLAG = 'Y'
and s.STOCK_TYPE_ID = 1
and c.BILL_STATE = 3
and substr(ca.org_code, 1, 3) <> 'BAK'
and c.STOCK_CHANGE_REASON_ID=3 -- 3=系统错误
group by ca.org_code, m.material_code;
begin
open c;
loop
fetch c into var_org_code,var_material_code,var_ammount;
exit when c%notfound;
update asc_ca_stock_good_usable
set ADJUST_NUM_ERROR=var_ammount
where ORG_CODE=var_org_code and MATERIAL_CODE=var_material_code and action_date=trunc(sysdate);
commit;
end loop;
end;
执行一10多分钟算不完,执行二只需0.2秒
发表评论
-
一个简单的随机数字串函数,欢迎拍砖改进
2006-02-22 14:41 634static public string GenRandom ... -
一个简单的e-mail校验函数,欢迎拍砖改进
2006-02-22 15:13 727/// <summary> /// 校验是否 ... -
一个简单的取用户真实IP函数[B/S],欢迎拍砖改进
2006-02-22 15:28 714可以取的真实IP的哦public static string ... -
一个高效判断字符串是否全数字的函数,请大家指正拍砖
2006-02-22 18:50 904看到很多人都采用正则表达式或者一些其它五花八门的算法。经过简单 ... -
多语言Web系统布局的几个小帖士
2006-02-28 14:50 916基于窗体的整体大小使用级联样式表表达式调整元素的大小 ... -
VS2003中自定义控件的智能提示解决方案备忘
2006-02-28 21:26 956这个问题困饶了很久了。一直没有妥善解决。最近从nhiberna ... -
一个简单的UrlRewrite示例[演示用,写给同事看的,VS2003环境]
2006-03-20 13:07 891UrlDemo.rar下载比较简单。关键点如下:一.Versi ... -
[笔记]1.软件的质量特性characteristics of software quality
2006-05-17 13:14 731外在特性:该软件产品用户所能感受到的部分。包括:正确性可用性效 ... -
[笔记]2.软件质量的一些统计数据
2006-05-17 13:43 1060一个关键事实:提高开发效率和改善质量的最佳途径——减少代码返工 ... -
[笔记]3.软件代码中的BUG问题的一些记录
2006-05-18 08:50 786题记 你越了解你的对手 ... -
[笔记]4.软件规模和开发的关系
2006-05-18 13:47 526前言: 对非软件领域的其他领域[比如化工、船舶等等] ... -
[SQL使用经验]选用 IN 还是 EXISTS,哪个性能更好
2006-09-12 10:08 1306一、EXISTS 并非总比IN 快,究竟应该选用 IN 还是 ... -
两个读取数据库VIew的定义的SQL语句的写法[Oracle /SQL SERVER]
2006-12-01 18:05 1070例如想读取的VIEW名称 MYVIEW在ORACLE中:SEL ... -
部署Excel相关的应用程序过程中遇到“检索COM类工厂中CLSID...”的两个错误的解决方法
2007-01-29 10:52 2007最近用.net写了一个相关Excel的B/S的程序,部署到20 ... -
VS2005无法调试,绑定句柄无效问题的解决方法
2007-02-02 13:04 1941今天我的VS2005调试时遇到以下两个错误: 1.无法连接到名 ... -
[转]数据库存储过程中利用extproc调用共享程序库/动态链接库,间接可以实现调用操作系统命令
2007-02-09 14:49 12041 数据库程序库主要介绍使用ORACLE数据库的LIBRARY ... -
powerdesigner中生成数据库脚本时出现长度限制问题的解决方法
2007-02-09 16:23 896今天有同事问这个问题,错误显示如下:事实上相关设计的脚本可以在 ... -
[转载整理]一本java书的序言——开发历程思绪随笔
2007-11-26 13:16 722以下文字是一本java书的 ...
相关推荐
游标是什么?就是在内存开辟的一块临时存储空间。下面通过本文给大家介绍Oracle隐式游标和显式游标的相关知识,需要的朋友参考下吧
Oracle显式游标和隐式游标.doc
游标是SQL的一个内存工作区,由系统或用户以...游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。
Oracle之隐式游标的使用方法.pdf 学习资料 复习资料 教学资源
关于oracle数据库隐式游标、显式游标相关用法的详细实例,还不错
1. oracle中的游标分为显示游标和隐式游标 2. 显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理;隐式游标是在执行插入 (insert)、删除(delete)、修改(update)和返回单条...
7.1 游标的概念 7.2 隐式游标 7.3 显式游标 7.4 异常处理
主要描述oracle中游标的学习隐式游标和显示游标
让你了解游标的语法与如何使用游标. ...PL/SQL管理隐式游标,当查询开始时隐式游标打开,查询结束时隐式游标自动关闭。显式游标在PL/SQL块的声明部分声明,在执行部分或异常处理部分打开,取出数据,关闭
Oracle游标分为显示游标和隐式游标。 显示游标(Explicit Cursor):在PL/SQL程序中定义的、用于查询的游标称作显示游标。 隐式游标(Implicit Cursor):是指非PL/SQL程序中定义的、而且是在PL/SQL中使用UPDATE/...
关于游标使用问题的练习附答案。游标分隐式和显示游标;动态和ref游标。。。
oracle游标管理:显示游标,隐式游标,REF游标
关于游标使用问题的练习和答案。游标分隐式和显示游标;动态和ref游标。适用于初学者。
了解数据与信息的基本概念 了解 DB、DBS、DBMS、RDBMS 的概念 熟悉三个世界 熟练掌握 E-R 概念及 E-R图的画法 掌握游标的概念。...隐式游标和显式游标。 Oracle 的异常处理。 设计数据库应用程序。
在PL/SQL中为所有SQL数据操纵语句(包括返回一行的select)隐式声明游标,称为隐式游标的原因是用户不能直接命名和控制此类游标.当用户在PL/SQL中使用数据操纵语言(DML)时,Oracle预先定义一个名为SQL的隐式游标
文章目录游标1.1 显式游标1.1.1 创建游标1.1.2 打开游标1.1.3 获取数据1.1.4 关闭游标1.1.5 使用实例1.2 隐式游标1.2.2 游标属性1.3 FOR游标1.4 游标变量1.4 游标表达式1.5 动态游标 游标 游标是一个指针,指向一块...
下面给大家介绍在什么情况下用隐式游标,什么情况下用显示游标: 1.查询返回单行记录时→隐式游标; 2.查询返回多行记录并逐行进行处理时→显式游标 –显示游标属性 declare CURSOR cur_emp IS SELECT * FROM emp;...
有关显示游标,隐式游标,动态游标的,如果没基础的话,可以参考这个看看哦