您的位置:首页 > 数据库

游标(光标)

2017-05-26 15:09 274 查看
cursor 光标名 [(参数名 数据类型[参数名,数据类型]…)] is select 语句

例:cursor c1 is select ename from emp;

打开光标;

-open c1;

关闭光标;

-close c1;(释放资源)

取一行光标的值;

- fetch c1 into pename(取一行到变量中)

例:使用光标查询员工的姓名和薪资,并打印;

/*1.光标的属性
%found %not found*/
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 cemp%notfound;
--打印
dbms_output.put_line(pename || '的薪水是' || psal);
end loop;
--关闭光标
close cemp;
end;


按员工的职位涨工资,总裁1000,经理800,其他400

/*按员工的职位涨工资,总裁1000,经理800,其他400*/
declare
cursor cemp is
select empno, job from emp;
pempno emp.empno%type;
pjob   emp.job%type;
begin
open cemp;
loop
fetch cemp
into pempno, pjob;
exit when cemp%notfound;
if pjob = 'president' then
update emp set sal = sal + 1000 where empno = pempno;
elsif pjob = 'manager' then
update emp set sal = sal + 800 where empno = pempno;
else
update emp set sal = sal + 400 WHERE empno = pempno;
end if;
end loop;
close cemp;
commit;--需要提交事务
dbms_output.put_line('涨工资完成');
end;


1.光标的属性

%found %notfound

%isopen 判断光标是否打开

%rowcount 影响的行数

2.光标数的限制

默认情况下,oracle数据库只允许在同一个会话中,打开300个光标
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  plsql