游标

重点来临
游标(cursor)
用数据库的语言来描述,游标是映射在结果集中一行数据的位置实例。其实质是结果集头顶的一个指针,以此来遍历结果集。
下面用一个实例来说明游标的控制语句
eg:
decalre
cuosor c is select from emp;--声明游标
v_emp c%rowtype;
begin
open c;--打开游标(返回select语句的结果集)
loop
  fetch c into v_emp;--从结果集中读数据
  exit when(c%notfound);
  dbms_output.put_line(v_emp.ename);
end loop;
close c;--关闭游标(清空内存)
end;

游标的属性
从上面提到的exit when(c%notfound)中%notfound就是一属性
属性1(%isopen)判断是否打开,如果被打开为true,否则为false
属性2(%found %notfound)判断游标是否有效
属性3(%rowcount)返回到当前位置为止游标读取的记录行数

游标的while循环
eg:
open c;
fetch c into v_emp;
  while(c%found) loop
    dbms_output.put_line(v_emp.ename);
    fetch c into v_emp;
end loop;
close c;
end;

游标的for循环(建议使用for循环,可以节省很多不必要的语句和麻烦)
eg:
decalre
cuosor c is select from emp;
begin
  for v_emp in c loop
       dbms_output.put_line(v_emp.ename);
  end loop;
end;

带参数的游标
declare
cursor c(v_deptno emp.deptno%type , v_job emp.job%type) is
select .........

可更新的游标
当前游标指向哪条记录,就更新哪条记录
eg:
declare
cursor c is select * from emp for update;--为了更新
begin
for v_emp in c loop
   if(v_emp.sal<2000) then
     update emp set sal=sal*2 where current of c;--到当前游标
   if(v_emp.sal=5000) then
     delete from emp  where current of c;--到当前游标
   end if;
end loop;
end
    



















你可能感兴趣的:(Cursor)