欢迎投稿

今日深度:

Oracle数据库中游标的使用

Oracle数据库中游标的使用


游标的定义:

    • ---游标的使用
      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;

www.htsjk.Com true http://www.htsjk.com/shujukunews/101.html NewsArticle Oracle数据库中游标的使用 游标的定义: ---游标的使用declare --定义一个游标,将tab_stu所有数据提取出来 cursor c_tab_stu is select * from tab_stu; r_tab_stu tab_stu%rowtype;--使用rowtype存储游标数据...
评论暂时关闭