1.隐式游标:用户不用定义,就可以直接使用的游标,名称叫SQL
2.显示的游标:用户自定义的游标
1)静态的游标:
declare
--1.声明静态的游标,为查询stud表
cursor mycur is select id,name,age from from stud;
--定义一个变量,用于每次从游标中获取三个值
v_stud stud%rowType;
begin
--2.打开游标
open mycur;
--遍历游标获取数据
loop
fetch mycur into v_stud;
--如果里面没有获取到数据则退出loop
exit when mycur%notfound;
--如果有数据就显示
dbms_output.put_line('id is' || v_stud.id || 'name is:' || v_stud.name);
end loop;
--关闭游标
close mycur;
--保证游标一定要关闭
exception
when others then
if mycur%isopen then
close mycur;
end if;
end;
2)接受参数的游标
declare
--1.声明静态的游标为查询stud表
cursor mycur(p_id int) is select id,name,age from stud where id > p_id;
v_stud stud%rowType;
begin
--2.打开游标
open mycur(&id);
--3.遍历游标获取数据
loop
fetch mycur into v_stud;
--如果没有获取到数据,就退出loop
exit when mycur%notfound;
--如果有就显示数据,
dbms_output.put_line('id is:'||v_stud.id||'name is '|| v_stud.name);
end loop;
--4.关闭游标
close mycur;
exception
when others then
if mycur%isopen then
close mycur;
end if;
end;
3)动态的游标:
declare
--先定义一个动态的游标的数据类型
--相当于java -- class Person()
TYPE cur IS REF CURSOR;
--定义一个自己的类型的变量
mycur cur; --Person mycur
--定义一个变量用于获取值
v_stud stud%rowType;
begin
--打开游标,设置打开的字符串
--查询语句
open mycur for 'select id,name,age from stud';
loop
fetch mycur into v_stud;
exit when mycur%notfound;
dbms_output.put_line('id is:'||v_stud.id||' '||v_stud.name);
end loop;
close mycur;
end;