1. 苏葳的备忘录首页
  2. 数据库

Oracle中的显式游标和隐式游标的使用区别

oracle 游标 显式 隐式游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。用数据库语言来描述游标就是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了。在Oracle中,有显式游标和隐式游标之分。

显式游标的定义:

declare aaa_cursor is select * from testtable; --定义游标
declare v_aa aaa_cursor%rowtype; --使用游标行类型,和记录行类型一样,非常方便。

隐式游标则可直接使用:

for v_aa in aaa_cursor loop
end loop;

这样就完成了一次隐式游标的调用,可以看到此种方式类似于高级语言的for循环。

而显式游标定义、打开与调用是分开的:

open aaa_cursor;
loop
fetch aaa_cursor into v_aa;
exit when aaa_cursor%notfound;
end loop;

这是一个繁琐的显式游标调用过程,循环以exit when aaa_cursor%notfound形式的语句退出。

然而在某些情况下显式游标使用起来会更加灵活。在隐式游标的for语句调用中,类似for语句,在取不到下条记录的情况下,不会进入循环体而会直接退出。这在某些情况下会造成一些不便,比如在无更多数据时应对最后一组数据进行处理再退出。此时显式游标以aaa_cursor%notfound条件判定再退出的形式就会有用的多,可以在循环体内根据aaa_cursor%notfound的条件手动控制退出的时机,进行最后一次处理。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/353.html

发表评论

邮箱地址不会被公开。 必填项已用*标注