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