游标的定义
游标是用来操作数据库中的查询结果集。(相当于JDBC中的ResultSet)
游标的类型
静态游标
结果集已经确实(静态定义)的游标。在执行前,明确知道sql语句游标 ,分为隐式和显示游标。
显示游标
用户显示声明的游标,即指定结果集。当查询返回结果超过一行时,就需要一个显式游标。用户自己写的sql语句,编译时能明确知道sql语句。
隐式游标
所有DML语句(增、删、改、查询单条记录)为隐式游标,该变量名不需要用户自己声明,它由系统帮我们定义,叫sql。使用时不需要声明隐式游标,它由系统定义。
隐式游标的使用:通过%rowcour判断是有使用了。
动态游标 (REF游标)
在执行前不知道sql语句游标,执行时才知道sql语句的游标。 动态关联结果集的临时对象。
强类型游标
规定返回类型
弱类型游标
不规定返回类型,可以获取任何结果集
游标的使用
游标遍历方法
声明游标
打开游标
open 游标名
从结果游标中取数据
fetch 游标名 into 变量
游标名%found : 找到数据
游标名%notfound:没有找到数据
关闭游标
close 游标名
游标举例
(1)查询成绩为90的所有学生信息;
declare
//声明游标,把要在控制台显示的数据赋值给游标
cursor cur is select * from t_student where score = 90;
//声明一个变量,用来存储游标的一行
s_row emp%rowtype;
begin //遍历游标
open cur;//打开游标
loop
//提取游标中的内容, 提取一行记录:fetch 游标名 into 变量;
fetch cur into s_row;
exit when cur%notfound;
dbms_output.put_line(s_row.sno || s_row.sname);
//循环, 退出,exit when 游标名%notfound; 当游标中没有提取到记录时退出
end loop;
close cur;//关闭游标
end;
(2)将成绩为90的学生 学分+10;
declare
cursor cur is select sno,sname from t_student where score = 90;
begin
--注意:for循环特点,可以自动打开和关闭游标
--i代表的是游标一行的内容
for i in cur loop
update t_student set sval = sval + 10 where sno = i.empno;
end loop;
end;