游标定义:
游标是sql的一个内存工作区,由系统或用户以变量的形式定义.
游标的作用就是用于临时存储从数据库中提取的数据块.
通俗讲游标就是一个结果集.
显式游标的处理语法:
1.定义游标
cursor crusor_name[(parameter_name datatype)] is
select_statement;
2.打开游标
open crusor_name;
3.提取数据
fetch crusor_name into variable1[,variable2];
4.关闭游标
close crusor_name;
实例1:查询所有员工的员工号,姓名和职位信息.
declare
--定义游标
cursor emp_cursor is select empno,ename,job from emp;
v_empno emp.empno%type;
v_ename emp.ename%type;
v_job emp.job%type;
begin
--打开游标,执行查询
open emp_cursor;
--提取数据
loop
fetch emp_cursor into v_empno,v_ename,v_job;
dbms_output.put_line('员工号:' || v_empno || ',姓名:' || v_ename || ',职位:' || v_job);
--没有数据时退出循环
exit when emp_cursor%notfound;
end loop;
--关闭游标
close emp_cursor;
end;
结果:
员工号:7369,姓名:SMITH,职位:CLERK
员工号:7499,姓名:ALLEN,职位:SALESMAN
员工号:7521,姓名:WARD,职位:SALESMAN
员工号:7566,姓名:JONES,职位:MANAGER
员工号:7654,姓名:MARTIN,职位:SALESMAN
员工号:7698,姓名:BLAKE,职位:MANAGER
员工号:7782,姓名:CLARK,职位:MANAGER
员工号:7788,姓名:SCOTT,职位:ANALYST
员工号:7839,姓名:KING,职位:PRESIDENT
员工号:7844,姓名:TURNER,职位:SALESMAN
员工号:7876,姓名:ADAMS,职位:CLERK
员工号:7900,姓名:JAMES,职位:CLERK
员工号:7902,姓名:FORD,职位:ANALYST
员工号:7934,姓名:MILLER,职位:CLERK
员工号:7934,姓名:MILLER,职位:CLERK
实例2:按照职工的职称涨工资,总裁涨1000元,经理涨500元,其他员工涨300元
declare
--定义游标
cursor empnew_cursor is select empno,job from empnew;
v_empno emp.empno%type;
v_job emp.job%type;
begin
--打开游标,执行查询
open empnew_cursor;
--提取数据
loop
fetch empnew_cursor into v_empno,v_job;
if v_job='PRESIDENT' then
update empnew set sal = sal + 1000 where empno = v_empno;
elsif v_job='MANAGER' then
update empnew set sal = sal + 500 where empno = v_empno;
else
update empnew set sal = sal + 300 where empno = v_empno;
end if;
exit when empnew_cursor%notfound;
end loop;
commit;
--关闭游标
close empnew_cursor;
end;
fetch的作用:
1.把当前指针指向的记录返回
2.将指针指向下一条记录
%found 游标中有记录返回true;
%notfound 游标中没有记录返回true;