游标的学习
1. 声明游标就是为了定义一个游标名称来对应一条查询语句,然后对这个查询结果集进行单行操作
声明语句在单个使用的时候需要在declare子句中进行,在存储过程中便是需要在存储过程定义里面定义
声明示例:
declare
cursor cur_name [....可以带参数] is select cb,duo....from testTable where id =1; 显式游标,对于单行操作
begin
end;
declare
cursor cur_name [....可以带参数] is select cb,duo....from testTable ; 隐式游标,对于多行结果集操作
begin
end;
2.打开游标
open cur_name[..] 如果带有参数则需要传参数...
3.检索游标
检索游标就是为了把单行数据保存到自己定义的变量中
示例:
declare
cursor cur_emp is select * from employees where employee=200;
row_emp employees%rowtype --定义变量为表中的一行数据 %type则是一列数据
begin
open cur_emp;
fetch cur_emp into row_emp;--检索游标
end;
4.关闭游标
close cur_name;
5.游标的属性
%FOUND:变量最后从游标中获取记录的时候,在结果集中找到了记录。
%NOTFOUND:变量最后从游标中获取记录的时候,在结果集中没有找到记录。
%ROWCOUNT:当前时刻已经从游标中获取的记录数量。
%ISOPEN:是否打开。
往往这些属性都是用来进行相信的判断的
6.游标的循环
6.1 简单的游标循环
示例:
declare
cursor cur_emp is select * from employees where employee=200;
row_emp employees%rowtype --定义变量为表中的一行数据 %type则是一列数据
begin
open cur_emp;
loop
fetch cur_emp into row_emp;--检索游标
eixt when cur_emp%NOTFOUND;
dbms_output.put_line('.....'); 表里每行的数据
end loop;
close cur_emp;
end;
6.2 for循环 好处:变量中已经存储了检索记录的所有列值,不需要在定义检索游标,而且在检索完之后会自动退出循环并隐式地关闭游标
示例:
for bieming in cur_emp
loop
使用列值的方式就是直接bieming.列名
......
end loop;
7.显式和隐式游标的区别:
显式游标使用的是SELECT叙述,被声明于任何一个区块的声明段落中,开发者可以控制几乎所有与游标有关的操作。
显示游标对游标的处理提供了其他类似的游标无法做到的控制。他们要使用一次会传回多余一笔记录的SELECT叙述。虽然他们提供了比隐式游标更多的控制,但也需要额外的步骤来操作。
PL/SQL为所有SQL数据操作语句(包括返回一行的SELECT)隐式声明游标,称为隐式声明游标的原因是用户不能直接命名和控制此类游标。当用户在PL/SQL中使用数据库操作语言(DML)时,Oracle预定义一个名为SQL的隐式游标,通过检查隐式游标的属性可以获取与最近执行的SQL语句相关的信息