zoukankan      html  css  js  c++  java
  • oracle储存过程--游标

    *游标*

    什么是游标

    用于临时存储一个查询返回结果的多行数据(结果集:类似于java的jdbc连接返回的resultset集合),通过遍历游标,可以逐行访问处理该结果集的数据。

    *游标的使用方式:声明--->打开--->读取--->关闭*

    *语法*

    *游标声明:*

    Cursor 游标名[(参数列表)] is 查询语句;

    游标的打开:open 游标名

    游标的取值:

    Fetch 游标名 into 变量列表

    游标的关闭:

    Close 游标名;

    *游标的属性*

    *其中,%notfound是在游标中找不到元素的时候返回true,通过那个用来判断退出循环*

    *不带有参数的游标*

    *小案例:*--使用游标查询emp表中所有员工的姓名和工资,并将其依次打印出来。****

    **-- Created on 2020/12/12 by zyq**
    declare
     **--声明游标**
     cursor c_emp is
      select ename, sal from emp;
     **--声明变量接收游标中的数据**
     v_ename emp.ename%type;
     v_sal  emp.sal%type;
     
    begin
     **--打开游标**
     open c_emp;
     **--遍历游标**
     loop
      **--获取游标中的数据**
      fetch c_emp
       into v_ename, v_sal;
      **--退出循环条件**
      exit when c_emp%notfound;
      dbms_output.put_line(v_ename || '_' || v_sal);
     end loop;
     
     **--关闭游标**
     close c_emp;
    
    end;
    

    *执行结果:*

    SMITH_800

    ALLEN_1600

    WARD_1250

    JONES_2975

    MARTIN_1250

    BLAKE_2850

    CLARK_2450

    SCOTT_3000

    KING_5000

    TURNER_1500

    ADAMS_1100

    JAMES_950

    FORD_3000

    MILLER_1300

    *带有参数的游标*

    *小案例:*--使用游标查询emp表中所有员工的姓名和工资,部门编号*为运行时手动输入。*****

    **-- Created on 2020/12/12 by zyq**
    
    declare
    
     **--声明游标  带有参数**
    
     cursor c_emp(v_deptno emp.deptno%type) is
    
      select ename, sal from emp where deptno = v_deptno;
    
     **--声明变量接收游标中的数据**
    
     v_ename emp.ename%type;
    
     v_sal  emp.sal%type;
    
    begin
    
     **--打开游标  传入参数**
    
     open c_emp(10);
    
     **--遍历游标**
    
     loop
    
      **--获取游标中的数据**
    
      fetch c_emp
    
       into v_ename, v_sal;
    
      **--退出循环条件**
    
      exit when c_emp%notfound;
    
      dbms_output.put_line(v_ename || '_' || v_sal);
    
     end loop;
    
     **--关闭游标 不需要传参数了**
    
     close c_emp;
    
    end;
    

    执行结果:

    CLARK_2450

    KING_5000

    MILLER_1300

    *注意: %notfound 属性默认值为false ,所以在循环中要注意判断条件的位置,如果先判断在fetch会导致最后一条记录的值被打印两次(多循环一次默认);*

  • 相关阅读:
    第二百一十五节,jQuery EasyUI,DateBox(日期输入框)组件
    第二百一十四节,jQuery EasyUI,Calendar(日历)组件
    onethink 系统函数中 生成随机加密key
    本地开发 localhost链接数据库比127.0.0.1慢
    仿写thinkphp的I方法
    判断数组中有没有某个键 isset 和 array_key_exists 的效率比较
    jquery实时监听某个文本框的输入事件
    js数组去重
    thinkphp3.2.3 版本使用redis缓存的时候无法使用认证
    javascript中使用md5函数
  • 原文地址:https://www.cnblogs.com/dongyaotou/p/14258985.html
Copyright © 2011-2022 走看看