游标
什么是数据库游标
从一个Java程序员的角度看,数据库中的游标作用与JDBC中ResultSet的作用相似。都是用于保存查询结果集,并提供了访问结果集中记录的方式
SQL语句 | 游标 |
---|---|
非查询语句 | 隐式的 |
结果是单行的查询语句 | 隐式的或显示的 |
结果是多行的查询语句 | 显示的 |
显示游标
1、游标是对查询出来的结果集进行处理的一个对象.即在数据库编程中利用游标来保存结果集。我们可以操作游标从而得到游标中指定行的记录
显示游标属性
%FOUND 布尔型属性,判断是否还有下一条记录
%NOTFOUND 布尔型属性,与%FOUND相反;
%ISOPEN 布尔型属性,当游标已打开时返回 TRUE;
%ROWCOUNT 数字型属性,返回已从游标中读取的记录数。
显示游标操作
可以使用while循环进行操作,或者for循环操作,使用while的话要声明,开启,使用,关闭,使用for循环的话会自动开启关闭游标;
第一步:声明游标:指明该游标代表的结果集
第二步:开启游标
第三步:使用游标:利用游标得到结果集中的信息
第四步:关闭游标
create table testCusor(
id varchar2(20),
name varchar2(20)
);
insert into testCusor values('1','1');
insert into testCusor values('11','11');
insert into testCusor values('12','12');
insert into testCusor values('13','13');
insert into testCusor values('14','14');
--使用while循环遍历游标
--创建一个带参数的游标
cursor test_Cursor(v_temp number default 11) is select id,name from testCusor where name > v_temp;
v_id testCusor.Id%TYPE;
v_name testCusor.Name%TYPE;
begin
--给游标传值,值为12
open test_Cursor(v_temp => 12);
fetch test_Cursor into v_id,v_name;
--如果有数据则进行循环里面的操作,在使用%found 前要进行fetch
while test_Cursor % found loop
fetch test_Cursor into v_id,v_name;
dbms_output.put_line(v_id || '--' || v_name);
end loop;
close test_Cursor;
end;
--使用%notfound
declare
--创建一个带参数的游标
cursor test_Cursor(v_temp number default 11) is select id,name from testCusor where name > v_temp;
v_id testCusor.Id%TYPE;
v_name testCusor.Name%TYPE;
begin
--给游标传值,值为12
open test_Cursor(v_temp => 12);
loop
fetch test_Cursor into v_id,v_name;
--在使用notfound 前要进行fetch 赋值
exit when test_Cursor % notfound;
dbms_output.put_line('如果有数据这里进行操作');
dbms_output.put_line(v_id || '--' || v_name);
end loop;
dbms_output.put_line('总条数' || '--' || test_Cursor %rowcount);
close test_Cursor;
end;
--使用for循环遍历游标
--使用for循环会自动开启、关闭、fetch游标,使用省心
declare
--声明游标
cursor test_cursor is select id,name from testCusor;
begin
--循环游标
for aaa in test_cursor loop
--如果在游标查询语句的选择列表中存在计算列,则必须为这些计算列指定别名后才能通过游标FOR 循环语句中的索引变量来访问这些列数据。
dbms_output.put_line(aaa.id || '--' || aaa.name);
end loop;
end;
--使用for循环,循环带参数的游标
declare
cursor test_cursor(temp number default 10 ) is select id,name from testCusor where id >temp;
begin
--如果不设置参数参数为默认值
for aaa in test_cursor(12) loop
dbms_output.put_line(aaa.id || '--' || aaa.name);
end loop;
end;
隐式游标
显式游标主要是用于对查询语句的处理,尤其是在查询结果为多条记录的情况下;而对于非查询语句,如修改、删除操作,则使用隐式游标,隐式游标就是一句sql;
格式调用为: SQL%
隐式游标属性
SQL%FOUND 布尔型属性,当最近一次读记录时成功返回,则值为TRUE;
SQL%NOTFOUND 布尔型属性,与%FOUND相反;
SQL %ROWCOUNT 数字型属性, 返回已从游标中读取得记录数;
SQL %ISOPEN 布尔型属性, 取值总是FALSE。SQL命令执行完毕立即关闭隐式游标。
隐式游标操作