我不会使用显式游标来执行此 *** 作。当可以使用隐式游标时,Steve F.不再建议人们使用显式游标。
的方法
count(*)不安全。如果另一个会话删除符合条件的行,则在的行之后
count(*),在的行之前
select ...into,代码将引发将无法处理的异常。
原始帖子的第二个版本没有此问题,通常是首选。
就是说,使用该异常会产生少量开销,并且如果您100%确定数据不会更改,则可以使用
count(*),但是我建议您使用它。
我在 32位Windows的 Oracle 10.2.0.1
上运行了这些基准测试。我只看过去的时间。还有其他测试工具可以提供更多详细信息(例如锁存器计数和使用的内存)。 __
SQL>create table t (NEEDED_FIELD number, COND number);
表已创建。
SQL>insert into t (NEEDED_FIELD, cond) values (1, 0);
已创建1行。
declare otherVar number; cnt number;begin for i in 1 .. 50000 loop select count(*) into cnt from t where cond = 1; if (cnt = 1) then select NEEDED_FIELD INTO otherVar from t where cond = 1; else otherVar := 0; end if; end loop;end;/
PL / SQL过程成功完成。
播出时间 : 00:00:02.70
declare otherVar number;begin for i in 1 .. 50000 loop begin select NEEDED_FIELD INTO otherVar from t where cond = 1; exception when no_data_found then otherVar := 0; end; end loop;end;/
PL / SQL过程成功完成。
播放时间: 00:00:03.06
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)