在其中存放SELECT语句返回的查询集。
游标的定义:
五个步骤:
1.定义获取数据的变量
2.声明游标,并指定查询
3.打开游标
4.抓取数据
5.关闭游标
经过这五个步骤的是显式游标,没有经过这5个步骤的是隐式游标(for)游标属性:
%ISOPEN:是否打开
%ROWCOUNT:行数
%FOUND:boolean值,是否还有数据
%NOTFOUND:是否已无数据
注意,显式游标使用游标名来引用。隐式游标用SQL引用。
--显式游标
--1.定义获取数据的变量
declare rowobj emp%rowtype;
--2.声明游标,并指定查询 CURSOR 游标名 IS 查询语句;cursor mycursor is select * from emp;
begin--3.打开游标
open mycursor;--4.抓取数据
loop
fetch mycursor into rowobj;
--抓取数据后判断是否还有数据
exit when mycursor%NOTFOUND;
syso(rowobj.ename||rowobj.sal);
--5.关闭游标close mycursor;
end;--隐式游标
begin
for tmp in (select * from emp) loop
syso(tmp.ename || tmp.sal);
end loop;end;
--动态游标
--1.定义获取数据的变量
declare rowobj emp%rowtype;
enameVar varchar2(20):='xxx';
sqlVar varchar2(2000):='select * from emp where 1=1';--2.声明游标,并指定查询 CURSOR 游标名 IS 查询语句;
mycursor sys_refcursor;
begin
if(enameVar is not null) then
--orcl中单引号的转义使用两个单引号''
sqlVar:=sqlVar||' and ename='''||enameVar||'''';
--3.打开游标
open mycursor for sqlVar;--4.抓取数据
loopfetch mycursor into rowobj;
--抓取数据后判断是否还有数据
exit when mycursor%NOTFOUND;
syso(rowobj.ename||rowobj.sal);
--5.关闭游标
close mycursor;end;