游标/光标的使用


1
--查询并打印员工的姓名和薪水 2 declare 3 --定义一个光标 4 cursor cemp is select ename,sal from emp; 5 --为光标定义对应的变量 6 pename emp.ename%type; 7 psal emp.sal%TYPE; 8 begin 9 --打开光标 10 open cemp; 11 loop 12 fetch cemp into pename,psal; --备注:要先取游标的数据,再执行退出条件exit.如果两者顺序反了,则此例子最后一条数据则会出现两条。 13 exit when cemp%notfound; 14 dbms_output.put_line(pename||'的薪水是:'||psal); 15 end loop; 16 --关闭光标 17 close cemp; 18 end; 19 /

执行结果:

备注:要先取游标的数据,再执行退出条件exit.如果两者顺序反了,则此例子最后一条数据则会出现两条。

2. 给员工涨工资

 1 --查询并打印员工的姓名和薪水
 2 declare 
 3 --定义一个光标
 4 cursor cemp is select empno,job from emp;
 5 --为光标定义对应的变量
 6 pempno   emp.empno%type;
 7 pjob     emp.job%TYPE;
 8 begin
 9 --打开光标
10 open cemp;
11 loop
12 fetch cemp into pempno,pjob;
13 exit when cemp%notfound;
14 if pjob='PRESIDENT' then update emp set sal=sal+1000 where empno=pempno;
15 ELSif pjob='MANAGER' then update emp set sal=sal+800 where empno=pempno;
16 else update emp set sal=sal+400 where empno=pempno;
17 end if;
18 end loop;
19 --关闭光标
20 commit;
21 close cemp;dbms_output.put_line('涨薪完成');
22 
23 end;
24 /

 3. 光标的使用(带参数)

如下为查询某个部门中员工的姓名

 1 declare
 2 cursor cemp(dno number) is select ename from emp where deptno=dno;
 3 pename emp.ename%type;
 4 begin
 5 open cemp(10);
 6 loop
 7 fetch cemp into pename;
 8 exit when cemp%notfound;
 9 dbms_output.put_line(pename);
10 end loop;
11 close cemp;
12 end;
13 /

 

posted @ 2020-03-22 23:00  佐小白  阅读(413)  评论(0)    收藏  举报