Oracle Cursor游标的使用

来源:互联网 发布:docker swarm 网络 编辑:程序博客网 时间:2024/06/11 16:57

Oracle 游标 cursor的使用

1、游标的使用

1、声明游标
2、打开游标
3、逐行读取游标中的数据,进行处理。
4、关闭游标

2、游标属性

open ---打开游标found --- 判断有没有受影响的数据notfound --- 判断有没有受影响的数据isopen --- 判断游标是否打开rowcount --- 返回受影响的行数fetch --- 向下移动一步游标close --- 关闭游标

3、游标分类

1、隐式游标

 隐式游标中SELECT..INTO 语句,当执行的时候会有三种可能:(1).结果集只含有一行,且select是成功的 (2).没有查询到任何结果集,引发NO_DATA_FOUND异常 (3).结果集中含有两行或者更多行,引发TOO_MANY_ROWS异常。
 //使用方式: sql%found … declare v_emp emp%rowtype; begin select * into v_emp from emp where empno = '7369'; if sql%isopen then   //当sql语句执行完毕后,隐式游标自动关闭 dbms_output.put_line('open'); end if; if sql%found then dbms_output.put_line('found'); end if; dbms_output.put_line(sql%rowcount); end; /

输出结果:

found1

2、显式游标

1、采用for循环的方式移动游标

 //采用for循环的方式,oracle将游标的open、fetch、close自动完成。[推荐使用] declare cursor cur_emp is select * from emp; begin for v_emp in cur_emp loop dbms_output.put_line(v_emp.empno||'   '||v_emp.ename); end loop; end; /

2、采用while循环的方式

//需要自己手动打开、移动、关闭游标,并需要判断当前游标是否有数据declarev_emp emp%rowtype;cursor cur_emp is select * from emp;beginopen cur_emp;fetch cur_emp into v_emp;while cur_emp%found loopdbms_output.put_line(v_emp.empno||'   '||v_emp.ename);fetch cur_emp into v_emp;end loop;close cur_emp;end;/

3、动态游标

//类似dowhile…结构/*1、声明一个游标类型,并指定游标的返回类型为emp%rowtype2、用声明的类型来创建变量 [变量名 类型]3、游标赋值 open cur_emp for select * from emp;4、使用并关闭游标*/declaretype emp_ref is ref cursor return emp%rowtype;cur_emp emp_ref; v_emprow emp%rowtype;beginopen cur_emp for select * from emp;loopfetch cur_emp into v_emprow;exit when cur_emp%notfound;dbms_output.put_line(v_emprow.empno||'   '||v_emprow.ename);end loop;close cur_emp;end;/
//while循环结构declaretype emp_ref is ref cursor return emp%rowtype;cur_emp emp_ref;v_emprow emp%rowtype;beginopen cur_emp for select * from emp;fetch cur_emp into v_emprow;while cur_emp%found loopdbms_output.put_line(v_emprow.empno||'   '||v_emprow.ename);fetch cur_emp into v_emprow;end loop;end;/

4、分页显示:

SQL> select *  2    from (select row_.*, rownum rownum_  3            from (select *  4                    from test  5                   order by id asc) row_  6           where rownum <= 20)  7   where rownum_ >= 10;
0 0
原创粉丝点击