• 从概念到示例—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;

  • 相关阅读:
    (八)断路器-Hystrix
    WINDOWS SERVER 2012 虚拟机 忘记密码后
    IIS FTP :在组合的密钥属性“users,roles,permissions”分别设置为“*,Read,Write”时,无法添加类型为“add”的重复集合项
    log4j 日志组件
    IDEA缓存
    com.alibaba.druid.pool.DruidDataSource
    EHCache CacheManager
    webservice调试(XML参数) Wizdler PostMan
    jar类库加载顺序
    JAXB工具
  • 原文地址:https://www.cnblogs.com/sunjie9606/p/2167418.html
Copyright © 2020-2023  润新知