oracle的游标用法, for循环游标和fetch into用法上有什么区别?

u010709188 2013-05-15 08:00:02
我感觉for 循环用法上比fetch into 简洁很多, 2者使用上有什么区别吗?
有什么场合是fetch 可以做,for 做不了的吗?

从用法上看,for 只要一句话就行了, fetch 又要打开,关闭游标,还要判断是否取到数据.

declare
cursor c_job
is
select * from emp;
c_row c_job%rowtype;
begin
===========================for=================================
for c_row in c_job loop
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
end loop;
end;

===================fetch=============================
open c_job;
loop
fetch c_job into c_row;
exit when c_job%notfound;
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
end loop;
close c_job;
...全文
39874 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
0302无名指 2016-01-11
  • 打赏
  • 举报
回复
引用 3 楼 u010709188 的回复:
[quote=引用 2 楼 u010412956 的回复:] for的效率高些,for的时候oracle默认会预提取一百行处理,类似批处理了。 比 单独的 fetch一条一条的快
有没有什么场景是只能用fetch, 不能用for的吗?[/quote] 有,当使用的不是显式游标时,如 ref cursor,只能用fetch,
maitianhust 2015-03-30
  • 打赏
  • 举报
回复
引用 5 楼 zhaowensheng123 的回复:
for 不需要显式声明游标,是隐式打开、关闭游标。 PL/SQL语言提供了游标FOR循环语句,自动执行游标的OPEN,FETCH,CLOSE语句和循环语句的功能。 当进入循环时,游标FOR循环语句自动打开游标,并提取第一行游标数据,当程序处理完当前所提取的数据而 进入下次循环时,游标FOR循环语句自动提取下一行数据供程序处理,当提取结果集合中的所有数据行后结束循环,并自动关闭游标。 用FETCH需要显式声明游标,显式打开、关闭游标。 在PL/SQL程序中,对于处理多行记录的事物经常使用游标来实现。
两个是通用的,个人喜欢用FOR游标写法
gooooak 2015-03-29
  • 打赏
  • 举报
回复
应该是fetch安全,但低效率。而for高效但可能会出现取不到数据
善若止水 2014-03-31
  • 打赏
  • 举报
回复
我个人还是比较喜欢隐式游标(for)的,方便。其实就是fetch是显式,for是隐式的。
WSZHAO_SELECT 2014-03-31
  • 打赏
  • 举报
回复
for 不需要显式声明游标,是隐式打开、关闭游标。 PL/SQL语言提供了游标FOR循环语句,自动执行游标的OPEN,FETCH,CLOSE语句和循环语句的功能。 当进入循环时,游标FOR循环语句自动打开游标,并提取第一行游标数据,当程序处理完当前所提取的数据而 进入下次循环时,游标FOR循环语句自动提取下一行数据供程序处理,当提取结果集合中的所有数据行后结束循环,并自动关闭游标。 用FETCH需要显式声明游标,显式打开、关闭游标。 在PL/SQL程序中,对于处理多行记录的事物经常使用游标来实现。
u010412956 2013-05-16
  • 打赏
  • 举报
回复
引用 3 楼 u010709188 的回复:
[quote=引用 2 楼 u010412956 的回复:] for的效率高些,for的时候oracle默认会预提取一百行处理,类似批处理了。 比 单独的 fetch一条一条的快
有没有什么场景是只能用fetch, 不能用for的吗?[/quote] 没有碰到过,基本都能 通用
u010709188 2013-05-16
  • 打赏
  • 举报
回复
引用 2 楼 u010412956 的回复:
for的效率高些,for的时候oracle默认会预提取一百行处理,类似批处理了。 比 单独的 fetch一条一条的快
有没有什么场景是只能用fetch, 不能用for的吗?
u010412956 2013-05-15
  • 打赏
  • 举报
回复
for的效率高些,for的时候oracle默认会预提取一百行处理,类似批处理了。 比 单独的 fetch一条一条的快
sych888 2013-05-15
  • 打赏
  • 举报
回复
for 不需要显式声明游标,是隐式打开、关闭游标 用FETCH需要显式声明游标,显式打开、关闭游标

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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