Oracle游标分为静态游标与REF游标。静态游标在编译时就知道SELECT语句的游标,而REF游标是运行时才确定SELECT语句,本文暂时只讨论静态游标,静态游标又分为:隐式游标和显示游标。
测试数据:
select * from test;
id info
----------------------
1 测试数据1
2 测试数据2
3 测试数据3
4 测试数据4
5 测试数据5
6 测试数据6
7 测试数据7
8 测试数据8
9 测试数据9
10 测试数据10
11 测试数据11
12 测试数据12
13 测试数据13
1、隐式游标
用来返回DML语句的信息,其属性有:
%FOUND --DML语句影响一行或多行的时候返回TRUE
%NOTFOUND --与%FOUND相反
%ROWCOUNT --受影响行数
%ISOPEN --游标是否打开
使用示例:
begin
update test set info='测试数据aaa' where id=110;
IF sql%FOUND then
dbms_output.put_line('表已经更新');
else
dbms_output.put_line('表没有被更新');
end if;
end;
/
2、显示游标
使用显示游标的步骤:
1)声明游标
2)打开游标
3)从游标中取记录
4)关闭游标
使用示例:
declare
my_info test.info%TYPE; --使用test.info这一列的类型定义一个变量my_info存放游标遍历出的值
cursor my_cur is --声明游标
select info from test where id>10;
begin
open my_cur; --打开游标
LOOP
fetch my_cur into my_info; --从游标里获取记录
exit when my_cur%notfound; --如果没有记录了就退出循环
DBMS_output.put_line(my_cur%ROWCOUNT || '.信息:'||my_info);
end LOOP;
close my_cur; --关闭游标
end;
/
以上只能查询其中一列
如果要查询表里的所有列的值需要使用循环游标
循环游标自动打开、提取和关闭游标
使用示例:
declare
CURSOR my_cur IS
select * from test where id>10;
begin
FOR per_rec IN my_cur --可以使用per_rec取每一列的值
loop
DBMS_OUTPUT.PUT_LINE(per_rec.id || '----' ||per_rec.info);
end loop;
end;
------------------------------------------------------------------------------聂