oracle 游标使用
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。
游标有两种类型:显式游标和隐式游标。在前述程序中用到的SELECT...INTO...查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,系统都会使用一个隐式游标。但是如果要提取多行数据,就要由程序员定义一个显式游标,并通过与游标有关的语句进行处理。显式游标对应一个返回结果为多行多列的SELECT语句。
游标一旦打开,数据就从数据库中传送到游标变量中,然后应用程序再从游标变量中分解出需要的数据,并进行处理。、
隐式游标的属性:
- SQL%ROWCOUNT 整型 代表DML语句成功执行的数据行数
- SQL%FOUND 布尔型 值为TRUE代表插入、删除、更新或单行查询操作成功
- SQL%NOTFOUND 布尔型 与SQL%FOUND属性返回值相反
- SQL%ISOPEN 布尔型 DML执行过程中为真,结束后为假
显示游标的属性:
- %ROWCOUNT 整型 获得FETCH语句返回的数据行数
- %FOUND 布尔型 最近的FETCH语句返回一行数据则为真,否则为假
- %NOTFOUND 布尔型 与%FOUND属性返回值相反
- %ISOPEN 布尔型 游标已经打开时值为真,否则为假
游标循环:
1、loop循环
open cur;
fetch cur into 参数1,参数2,参数3;
exit when c_cur%notfound;
…… /*执行业务逻辑*/
end loop ;
colse cur;
exit when语句一定要紧跟在fetch之后,避免多余的数据处理,放在fetch之前会出现重复的一条数据, 处理逻辑需要跟在exit when之后。
2、while循环
open cur;
fetch cur into 参数1,参数2;
while cur%found loop
…… 业务逻辑
fetch cur into 参数1,参数2 ;
end loop;
close cur;
使用while 循环时,需要在循环之前进行一次fetch动作.数据处理动作必须放在循环体内的fetch方法之前。循环体内的fetch方法要放在最后。否则就会多处理一次。
3、for循环
for item in curloop
v_aa := item.aa;
v_bb := item.bb;
… 业务逻辑
end loop;
for循环自动open和close游标。

浙公网安备 33010602011771号