Oracle显式游标的使用

游标定义:

游标是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;

上一篇:java-this关键字详解


下一篇:Oracle学习——对查询结果排序order by、查询语句中列的别名、连接符、字符串