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会导致最后一条记录的值被打印两次(多循环一次默认);*

  • 相关阅读:
    android cts 命令的说明
    k8s认证授权和dashboard部署
    Pod对象的基本概念
    k8s创建自定义资源
    flannel网络插件介绍
    go语言包的介绍
    安装k8s的自动代码生成器
    k8s的pv和pvc概念
    Es索引匹配查询
    shell实现自动化部署项目
  • 原文地址:https://www.cnblogs.com/dongyaotou/p/14258985.html
Copyright © 2011-2022 走看看