游标/光标的使用
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 /

浙公网安备 33010602011771号