Oracle游标使用参考语句实例解析
程序员文章站
2022-04-01 10:38:30
游标是从表中检索出结果集,从中每次指向一条记录进行交互的机制。作用 指定结果集中特定行的位置。 基于当前的结果集位置检索一行或连续的几行。 在结果集的当前位置修改行中的数据。 对其他用户所做的...
游标是从表中检索出结果集,从中每次指向一条记录进行交互的机制。
作用
- 指定结果集中特定行的位置。
- 基于当前的结果集位置检索一行或连续的几行。
- 在结果集的当前位置修改行中的数据。
- 对其他用户所做的数据更改定义不同的敏感性级别。
- 可以以编程的方式访问数据库。
一个简单实用:
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;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。