zoukankan      html  css  js  c++  java
  • 从概念到示例—Oracle显式游标

    个人总结:
       游标就是一个指向在客户端通过查询语句返回结果集中的指针,它存储在服务器端、
    并维护着它内部所存储的数据,它主要利用了服务器端的高性能,解决了复杂运算在网
    络间通信差的问题,游标不可乱用,否则会对服务器端的性能造成一定的影响。

    一、显式游标
      1.由用户显式声明  cursor
      2.游标将指向活动集中的当前行

    二、控制显式游标分为三个步骤
      1.Open
      2.Fetch  提取
      3.Close
     -- 注意 游标需要先声明,然后才能使用哦.

    示例1:使用游标简单的提取一行记录
    declare
       /*以下声明了一个显式游标,指向查询到得结果集*/
       cursor  empCur  is  select * from emp;
       emprow emp%rowtype;  --用于存储emp表的一行记录
    begin
       open empCur;   --打开游标
       fetch empCur into emprow;  --从游标中提取一行记录
       DBMS_output.put_line('employee no:'||emprow.empno||'employee name'||emprow.ename);
       close empCur; --关闭游标
    end;

    示例2:使用游标提取表中的所有记录,用loop循环提取
    declare
       cursor  empCur  is  select * from emp;--声明游标
       emprow emp%rowtype;  --用于存储emp表的一行记录
    begin
       open empCur;   
       loop
         fetch empCur into emprow;  
         exit when empCur%notfound; --退出条件
         DBMS_output.put_line('employee no:'||emprow.empno||'employee name:'||emprow.ename);
         DBMS_output.put_line('提取了'||empCur%rowcount); 
       end loop;
       close empCur; --关闭游标
    end;

    示例3:使用游标提取表中的所有记录,用while循环提取
    declare
       cursor  empCur  is  select * from emp;--声明游标
       emprow emp%rowtype;  --存储emp表的一行记录
    begin
       open empCur;  
       fetch empCur into emprow;   --先初始化 
       While empCur%Found Loop     --进入循环的条件
         DBMS_output.put_line('employee no:'||emprow.empno||' '||'employee name:'||emprow.ename);
         DBMS_output.put_line('提取了'||empCur%rowcount); 
       fetch empCur into emprow;   --增量条件  否则进入死循环
       end loop;
       close empCur; --关闭游标
    end;
    示例4:使用游标提取表中的所有记录,用for循环提取
     特点是: 
        自动声明行级变量
        自动打开  
        自动提取 
        自动关闭的
        简化代码的编写
      缺点是:
         一次性会把结果集都输出。造成不必要的资源浪费。
    declare
       cursor  empCur  is  select * from emp;--声明游标
    begin
        for emprow in empCur loop
         DBMS_output.put_line('employee no:'||emprow.empno||' '||'employee name:'||emprow.ename);
         DBMS_output.put_line('提取了'||empCur%rowcount); 
        end loop;
    end;

    示例5:改造游标,使用绑定变量,使游标具有动态性 
    使用绑定变量在编译时对代码进行赋值
    declare
       cursor  empCur  is  select * from emp where  sal>&InputSalary;
       iCount int;
    begin
        iCount:=&iCount;
        DBMS_output.put_line('iCount='||iCount);
        for emprow in empCur loop
         DBMS_output.put_line('employee no:'||emprow.empno||' '||'employee name:'||emprow.ename);
         DBMS_output.put_line('提取了'||empCur%rowcount); 
        end loop;
    end;

    示例6:带参数的游标使用方法
     declare
         cursor empCur(param number default 10) is select * from emp where deptno=param;
     begin
         for emprow in empCur(10) loop
            DBMS_output.put_line('employee no:'||emprow.empno||' '||'employee name:'||emprow.ename);
         end loop;
     end;

  • 相关阅读:
    Linux下安装Apache2.4.43踩坑记录
    网络代理条件下配置git
    docker存储驱动的选择
    Python列表排序
    解决apache无法启动No space left on device
    Flask匹配url使用正则表达式
    Web安全-客户端脚本安全
    springboot中的一些好用注解
    基于cdn方式的vue+element-ui的单页面架构
    干货网站
  • 原文地址:https://www.cnblogs.com/sunjie9606/p/2167418.html
Copyright © 2011-2022 走看看