关闭

Oracle数据库中游标的使用

标签: Oracle游标的使用
33619人阅读 评论(0) 收藏 举报
分类:

游标的定义:

  • 游标的作用
  • 创建步骤:
    • 定义一个游标
      • 语法:CURSOR cursor_name is select _statement;
    • 打开游标
      • 语法:open cursor_name;
    • 提取数据
      • 使用fetch,fetch关键字会抓取当前行的记录,并将记录指针下移一行。就像JdbC中的ResultSet一样。
      • 语法:fetch cursor_name into variable1,variable2.
      • 游标的一些属性
    • 关闭游标
      • 语法:close cursor_name
  • 示例代码如下:
    • 普通的方法:
      ---游标的使用
      declare
        --定义一个游标,将tab_stu所有数据提取出来
       cursor c_tab_stu is
       select * from tab_stu;
       
       r_tab_stu tab_stu%rowtype;--使用rowtype存储游标数据
       
      begin
        --打开游标
        open c_tab_stu;
        --提取数据
        fetch c_tab_stu into r_tab_stu;
        dbms_output.put_line('stu_id:'||r_tab_stu.stu_id);
        dbms_output.put_line('stu_name:'||r_tab_stu.stu_name);
        dbms_output.put_line('stu_age:'||r_tab_stu.stu_age);
        --关闭游标
        close c_tab_stu;
      end;

    • 使用循环的方法
      --使用循环提取所有记录
      declare
        --定义一个游标,将tab_stu所有数据提取出来
       cursor c_tab_stu is
       select * from tab_stu;
       
       r_tab_stu tab_stu%rowtype;--使用rowtype存储游标数据
       
      begin
        --打开游标
        open c_tab_stu;
        --提取数据
        loop 
           fetch c_tab_stu into r_tab_stu;
           --退出条件,也就是上面图片的属性的值
           exit when c_tab_stu%notfound;
           
           dbms_output.put_line('stu_id:'||r_tab_stu.stu_id);
           dbms_output.put_line('stu_name:'||r_tab_stu.stu_name);
           dbms_output.put_line('stu_age:'||r_tab_stu.stu_age);
           
        end loop;
       
        --关闭游标
        close c_tab_stu;
      end;

    • 使用含有参数的游标和嵌套循环:
      --含有条件的游标
      --实现目标是,查询每个班的学生
      declare
      --先要定义两个游标
      --定义tab_class游标
      cursor s_tab_class is
      select * from tab_class;
      --定义tab_stu游标,但是这里需要一个参数,就是班级的id
      cursor s_tab_stu(v_class_id number) is
      select * from tab_stu where class_id=v_class_id;
      
      --定义两个存储变量
      --定义tab_class
      v_tab_class_rowtype tab_class%rowtype;
      
      --定义tab_stu
      v_tab_stu_rowtype tab_stu%rowtype;
      begin
        --打开游标
        open s_tab_class;
        loop
          --提取数据
          fetch s_tab_class into v_tab_class_rowtype;
          exit when s_tab_class%notfound;
          dbms_output.put_line('班级:'||v_tab_class_rowtype.class_name||'含有');
          --嵌套循环,遍历当前班级的学生
          open s_tab_stu(v_tab_class_rowtype.class_id);
          loop
            fetch s_tab_stu into v_tab_stu_rowtype;
            exit when s_tab_stu%notfound;
            dbms_output.put_line(v_tab_stu_rowtype.stu_name);
          end loop;
          close s_tab_stu;
        end loop;
        close s_tab_class;
      end;

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    欢迎关注个人微信号
      欢迎关注微信账号:在路上的coder .每天一篇java相关或互联网相关的文章




    个人资料
    • 访问:808391次
    • 积分:2822
    • 等级:
    • 排名:第14222名
    • 原创:86篇
    • 转载:4篇
    • 译文:0篇
    • 评论:25条
    资源分享地址
    个人博客地址
    博客专栏
    最新评论