一直以为以下这种语句(执行一)就是隐式游标,跟显式定义游标(执行二)运行速度差不了多少。为方便简单起见,我通常都是用执行一的方式来写循环操作,数据量较小没有觉得有什么,只到有一天,一个海量数据的更新运行了一晚上都没出来结果,才知道自己犯了多大的错误:
执行一:
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 698static public string GenRandom ... -
一个简单的e-mail校验函数,欢迎拍砖改进
2006-02-22 15:13 757/// <summary> /// 校验是否 ... -
一个简单的取用户真实IP函数[B/S],欢迎拍砖改进
2006-02-22 15:28 756可以取的真实IP的哦public static string ... -
一个高效判断字符串是否全数字的函数,请大家指正拍砖
2006-02-22 18:50 964看到很多人都采用正则表达式或者一些其它五花八门的算法。经过简单 ... -
多语言Web系统布局的几个小帖士
2006-02-28 14:50 987基于窗体的整体大小使用级联样式表表达式调整元素的大小 ... -
VS2003中自定义控件的智能提示解决方案备忘
2006-02-28 21:26 979这个问题困饶了很久了。一直没有妥善解决。最近从nhiberna ... -
一个简单的UrlRewrite示例[演示用,写给同事看的,VS2003环境]
2006-03-20 13:07 922UrlDemo.rar下载比较简单。关键点如下:一.Versi ... -
[笔记]1.软件的质量特性characteristics of software quality
2006-05-17 13:14 769外在特性:该软件产品用户所能感受到的部分。包括:正确性可用性效 ... -
[笔记]2.软件质量的一些统计数据
2006-05-17 13:43 1086一个关键事实:提高开发效率和改善质量的最佳途径——减少代码返工 ... -
[笔记]3.软件代码中的BUG问题的一些记录
2006-05-18 08:50 813题记 你越了解你的对手 ... -
[笔记]4.软件规模和开发的关系
2006-05-18 13:47 552前言: 对非软件领域的其他领域[比如化工、船舶等等] ... -
[SQL使用经验]选用 IN 还是 EXISTS,哪个性能更好
2006-09-12 10:08 1335一、EXISTS 并非总比IN 快,究竟应该选用 IN 还是 ... -
两个读取数据库VIew的定义的SQL语句的写法[Oracle /SQL SERVER]
2006-12-01 18:05 1114例如想读取的VIEW名称 MYVIEW在ORACLE中:SEL ... -
部署Excel相关的应用程序过程中遇到“检索COM类工厂中CLSID...”的两个错误的解决方法
2007-01-29 10:52 2053最近用.net写了一个相关Excel的B/S的程序,部署到20 ... -
VS2005无法调试,绑定句柄无效问题的解决方法
2007-02-02 13:04 1972今天我的VS2005调试时遇到以下两个错误: 1.无法连接到名 ... -
[转]数据库存储过程中利用extproc调用共享程序库/动态链接库,间接可以实现调用操作系统命令
2007-02-09 14:49 12631 数据库程序库主要介绍使用ORACLE数据库的LIBRARY ... -
powerdesigner中生成数据库脚本时出现长度限制问题的解决方法
2007-02-09 16:23 939今天有同事问这个问题,错误显示如下:事实上相关设计的脚本可以在 ... -
[转载整理]一本java书的序言——开发历程思绪随笔
2007-11-26 13:16 756以下文字是一本java书的 ...
相关推荐
1. **Oracle隐式游标** - **概念**:隐式游标是Oracle在后台自动管理的一种游标,每当执行一个DML(插入、更新、删除)或DDL语句时,系统都会自动打开、处理并关闭一个隐式游标。 - **常用隐式游标属性**: - `...
游标分为两种主要类型:**隐式游标**和**显示游标**。此外,还可以利用游标进行循环处理,以实现更复杂的数据操作需求。 #### 二、隐式游标 隐式游标是在执行DML(数据操纵语言)操作或单行`SELECT INTO`语句时由...
Oracle 显式游标和隐式游标 Oracle 中的游标是 SQL 的一个内存工作区,由系统或用户以变量的形式定义。游标有两种类型:显式游标和隐式游标。显式游标是一种明确声明的游标,需要在声明部分使用 CURSOR 语句来定义...
Oracle中的隐式游标是...总之,Oracle的隐式游标提供了一种方便的方式来处理DML操作,而无需显式声明和管理游标。通过使用隐式游标的属性,我们可以轻松地获取操作状态并进行条件判断,提高了代码的可读性和效率。
游标主要分为两种类型:显式游标和隐式游标。显式游标是用户通过编程定义的,可以处理多行数据;而隐式游标则是由数据库系统自动处理的,通常用于处理单行数据。 显式游标需要开发者明确声明、打开、获取数据以及...
在Oracle中,游标分为隐式游标和显式游标。 **一、游标简介** 游标的核心功能是提供一种方式来遍历查询结果集,一次处理一行数据。游标分为静态游标和引用(ref)游标。静态游标在编译时就确定了SELECT语句,包括...
静态游标是指结果集已经确实(静态定义)的游标,可以进一步分为隐式游标和显示游标。隐式游标是所有 DML 语句为隐式游标,可以通过隐式游标属性获取 SQL 语句信息。显示游标是用户显示声明的游标,即指定结果集。当...
静态游标是隐式游标或显式游标。隐式游标是 PL/SQL 为所有 DML 语句打开的一个隐式游标,在 SQL 操作完成后,关闭游标。显式游标是用户定义的游标,需要使用 DECLARE 语句声明。 ### 游标属性 游标属性可以用来...
在 ORACLE 9i 中,隐式游标有四种属性:SQL%ROWCOUNT、SQL%FOUND、SQL%NOTFOUND 和 SQL%ISOPEN。这些属性可以用于了解操作的状态和结果,进而控制程序的流程。 隐式游标的使用可以通过以下步骤来实现: 1. 使用 ...
游标分为显式游标、隐式游标和动态游标三种类型。 1. **显式游标**: - 显式游标允许返回多行记录,但在使用之前必须先声明。它适用于查询条件已知的情况。 - 定义显式游标使用`DECLARE`语句,例如:`DECLARE ...
- **隐式游标**:ORACLE自动管理的游标,通常在执行DML语句(如UPDATE、INSERT、DELETE)时使用。例如,当执行UPDATE语句后,`SQL%ROWCOUNT`属性可以返回受影响的行数。另外,`CURSOR FOR LOOP`结构简化了遍历查询...
游标主要分为隐式游标和显式游标: - 隐式游标:由系统自动创建和管理,无需用户显式声明。对于任何SQL数据操作,包括返回一条记录的查询,都会有一个隐式游标。用户可以通过访问隐式游标的属性来获取信息。 - 显式...
这里详细介绍了Oracle中的三种游标类型:隐式游标、显式游标和REF游标。 1. **隐式游标**: - 隐式游标是Oracle自动管理和使用的,不需要程序员显式声明。当执行DML(Insert、Delete、Update、Merge into)操作时...
首先,游标分为两种类型:隐式游标和显式游标。隐式游标是Oracle自动管理的,当你在PL/SQL块中执行DML语句(如INSERT, UPDATE, DELETE)时,系统会默认使用。隐式游标提供了几个内置属性来检查执行结果,如SQL%FOUND...
游标可以分为两种类型:显式游标和隐式游标。 显式游标 显式游标需要声明、打开、读取和关闭四个步骤。声明游标时,需要指定游标名和SELECT语句。打开游标时,游标将位于结果集的第一条记录位置。读取数据时,从...
Oracle数据库中的游标主要分为两种类型:隐式游标和显式游标。隐式游标是Oracle自动管理的,每次执行DML语句(INSERT、UPDATE、DELETE)时都会使用。而显式游标则需要我们手动声明和管理,适用于更复杂的逻辑处理。 ...
- Oracle游标有两种类型:隐式游标和显式游标。隐式游标由数据库自动管理,通常在SQL DML语句执行时使用;显式游标则允许程序员更精细地控制数据处理过程。 2. **显式游标的操作** - OPEN:打开游标,准备读取...
在执行这些语句时,Oracle会自动创建并管理隐式游标,无需程序员显式声明和操作。 异常处理是Oracle PL/SQL中的另一核心特性,它帮助我们处理程序执行过程中的错误和异常情况。Oracle提供了一系列预定义的异常,...