游标(光标Cursor)
为什么要使用游标?
在写java程序中有集合的概念,那么在pl/sql中也会用到多条记录,这时候要用到游标,游标可以存储查询返回的多条数据
语法:
CURSOR 游标名 [(参数名 数据类型, 参数名 数据类型…)] IS SELECT 语句;
例如:cursor c1 is select ename from emp;
游标的使用步骤:
打开游标: open c1;(打开游标执行查询)
取一行游标的值: fetch c1 into pjob;(取一行到变量中)
关闭游标:close c1;(关闭游标释放资源)
游标的结束方式 exit when c1 %notfound
注意:上面的pjob必须与emp表中的job列类型一致
定义:pjob emp.empjob%type;
示例1:
declare
--定义光标(游标)
cursor cemp is select ename,sal from emp;
pename emp.ename%type;
psal emp.sal%type;
begin
--打开
open cemp;
loop
--取当前记录
fetch cemp into pename,psal;
--exit when 没有取到记录;
exit when cemp%notfound;
dbms_output.put_line(pename||'的薪水是'||psal);
end loop;
--关闭
close cemp;
end;
/
`
示例2:带参数的游标
-- 查询某个部门的员工姓名
declare
--形参
cursor cemp(dno number) is select ename from emp where deptno=dno;
pename emp.ename%type;
begin
--实参
open cemp(20);
loop
fetch cemp into pename;
exit when cemp%notfound;
dbms_output.put_line(pename);
end loop;
close cemp;
end;
/