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

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;
原文地址:https://www.cnblogs.com/t0404/p/10291065.html