当前位置: 移动技术网 > IT编程>数据库>Oracle > Oracle游标使用参考语句实例解析

Oracle游标使用参考语句实例解析

2020年11月04日  | 移动技术网IT编程  | 我要评论
游标是从表中检索出结果集,从中每次指向一条记录进行交互的机制。作用 指定结果集中特定行的位置。 基于当前的结果集位置检索一行或连续的几行。 在结果集的当前位置修改行中的数据。 对其他用户所做的

游标是从表中检索出结果集,从中每次指向一条记录进行交互的机制。

作用

  • 指定结果集中特定行的位置。
  • 基于当前的结果集位置检索一行或连续的几行。
  • 在结果集的当前位置修改行中的数据。
  • 对其他用户所做的数据更改定义不同的敏感性级别。
  • 可以以编程的方式访问数据库。

一个简单实用:

declare 
  -- 声明游标  
  cursor mycur is 
    select * from emp; 
  empinfo emp%rowtype; 
  cou   number; 
begin 
  -- 游标操作使用循环,但是在操作之前必须先将游标打开  
  for empinfo in mycur loop 
    cou := mycur%rowcount; 
    dbms_output.put_line('行号:' || cou || '  雇员编号:' || empinfo.empno || '  雇员姓名:' || empinfo.ename); 
  end loop; 
end; 

循环取出数据的两种写法:

declare 
  -- 声明游标  
  cursor mycur is 
    select * from emp; -- list (emppo)  
  empinfo emp%rowtype; 
  cou   number; 
begin 
  -- 游标操作使用循环,但是在操作之前必须先将游标打开  
  if mycur%isopen then 
    null; 
  else 
    open mycur; 
  end if; 
  -- 使游标向下一行  
  fetch mycur 
    into empinfo; 
  -- 判断此行是否有数据被发现  
  while (mycur%found) loop 
    cou := mycur%rowcount; 
    dbms_output.put_line('行号:' || cou || '  雇员编号:' || empinfo.empno || '  雇员姓名:' || empinfo.ename); 
    -- 修改游标,继续向下  
    fetch mycur 
      into empinfo; 
  end loop; 
end; 

第二种写法:

declare 
  -- 声明游标 
  cursor mycur is 
    select * from emp; 
  empinfo emp%rowtype; 
  cou   number; 
begin 
  -- 游标操作使用循环,但是在操作之前必须先将游标打开  
  if mycur%isopen then 
    null; 
  else 
    open mycur; 
  end if; 
  loop 
    -- 使游标向下一行  
    fetch mycur 
      into empinfo; 
    exit when mycur%notfound; 
    cou := mycur%rowcount; 
    dbms_output.put_line('行号:' || cou || '  雇员编号:' || empinfo.empno || '  雇员姓名:' || empinfo.ename); 
  end loop; 
end; 

在存储过程中使用游标

create or replace procedure myproc(oi_return out integer) is 
  cursor mycur is 
    select * from emp_0915; 
  empinfo emp_0915%rowtype; 
  cou   number; 
  exc_return exception; -- 程序中间返回自定义异常 
begin 
  if mycur%isopen then 
    null; 
  else 
    open mycur; 
  end if; 
  loop 
    fetch mycur 
      into empinfo; 
    exit when mycur%notfound; 
    cou := mycur%rowcount; 
    dbms_output.put_line(cou || '开始更新...'); 
    update emp_0915 t set t.sal = t.sal + 1 where t.empno = empinfo.empno; 
    dbms_output.put_line(cou || '更新结束...'); 
  end loop; 
  commit; 
  oi_return := 1; 
exception 
  when exc_return then 
    rollback; 
    oi_return := 0; 
end; 

在oracle中测试:

declare 
  re integer; 
begin 
  myproc(re); 
  if re = 1 then 
    dbms_output.put_line(re || ':执行结束。。。'); 
  else 
    dbms_output.put_line(re || ':执行错误_______'); 
  end if; 
end; 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网