您的位置:首页 > 数据库 > Oracle

4000 Oracle游标的使用方法以及使用for循环实现游标的原理

2016-07-01 23:44 711 查看
select * from tb_grade t for update

   --1普通游标(显示游标)

   declare

   --定义游标 用于查询表结构的数据集

   cursor grade_cursor is select cname from tb_grade;

   --定义行变量 可以是 游标%rowtype 也可以是 表%rowtype

   grade_row  grade_cursor%rowtype;

   begin

      --打开游标

      open grade_cursor;

      loop

          --通过游标抓取一行

          fetch grade_cursor into grade_row;

          --判断游标是否到了最后一行

          exit when grade_cursor%notfound;

          --逻辑语句应该在exit when之后

          syso(grade_row.cname);

      end loop;

      --关闭游标

      close grade_cursor;

   end;

   

   --2引用游标(动态游标)(显示游标)

   declare type dyncCursor is ref cursor;

   cursor_tmp dyncCursor;

   grade_row tb_grade%rowtype;

   begin

      --打开游标

      open cursor_tmp for select * from tb_grade;

      loop

          --通过游标抓取一行

          fetch cursor_tmp into grade_row;

          --判断游标是否到了最后一行

          exit when cursor_tmp%notfound;

          --逻辑语句应该在exit when之后

          syso(grade_row.cname);

      end loop;

      --关闭游标

      close cursor_tmp;

     

   end;

   

   

   --3带参数游标

   declare

   --定义游标 用于查询表结构的数据集

   cursor grade_cursor(id1 number) is select cname from tb_grade where cid=id1;

   --定义行变量 可以是 游标%rowtype 也可以是 表%rowtype

   grade_row  grade_cursor%rowtype;

   begin

      --打开游标

      open grade_cursor(4);

      loop

          --通过游标抓取一行

          fetch grade_cursor into grade_row;

          --判断游标是否到了最后一行

          exit when grade_cursor%notfound;

          --逻辑语句应该在exit when之后

          syso(grade_row.cname);

      end loop;

      --关闭游标

      close grade_cursor;

   end;

   

   --隐式游标 oracle负责帮程序 打开关闭抓取游标 常用的方式

   declare  

     cursor grade_cursor is select cname from tb_grade;

   begin

      for stu_tmp in grade_cursor loop
     syso(stu_tmp.cname);
   end loop;

     

   end;

   

   

   

   --普通for循环输出表记录行   作业

   /**

      List list=new ArrayList();

      int count=list.size();

      for(int v=0;v<count;v++){

         V v=list.get(v);

      }

   **/

   declare rowco number;

   rowdata tb_grade%rowtype;

   begin

      select count(rowid) into rowco from tb_grade;

      for(v in 1..rowco) loop

          select * into rowdata from tb_grade where rownum=v;

          syso(rowdata.cname);

      end loop;

   end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: