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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值