【学亮IT手记】PL/SQL游标编程

游标提供了一种从表中检索数据并进行操作的灵活手段,主要用在服务器上,处理由客户端发送给服务器端的sql语句,或者是批处理、存储过程、触发器中的数据处理请求。

显式游标

是由用户声明和操作的一种游标,通常用于将查询出的结果集进行操作,使用它处理数据的步骤包括:声明游标,打开游标,读取游标,关闭游标。

①声明游标

cursor cur_emp 
is
select ename,job from emp where empno=7499;
cur_emp:游标名称。

 ②打开游标

open cur_emp

③读取游标

fetct cur_emp into {variable}

④关闭游标

close cur_emp

游标的常用属性

无论是显式游标还是隐式游标,都具有%found  %notfound  %rowcount  %isopen 这4个属性。

 1 declare
 2     var_ename varchar2(50);
 3     var_job varchar2(50);
 4 cursor cur_emp
 5 is
 6     select ename,job from emp where empno=7499;
 7 begin
 8     open cur_emp;
 9     fetch cur_emp into var_ename,var_job;
10 if cur_emp%found then
11     dbms_output.put_line('编号是7499的员工名称为:'||var_ename||',职务是:'||var_job);
12 else
13     dbma_output.put_line('无数据记录');
14 end if;
15 end;

 隐式游标

在执行一个sql语句的时候,oracle会自动创建一个隐式游标。主要是针对update/delete语句的执行结果进行操作。

1 begin
2     update emp set sal=sal*(1+0.2) where job='SALESMAN';
3     if sql%notfound then 
4         dbms_output.put_line('没有雇员需要上调工资');
5     else
6         dbms_output.put_line(''||sql%rowcount||'个雇员工资上调20%');
7     end if;
8 end;

使用for语句遍历游标

①使用for遍历隐式游标

1 begin
2     for emp_record in
3         (select empno,ename,sal from emp where job='SALESMAN')
4     loop
5         dbms_output.put_line('雇员编号:'||emp_record.empno);
6         dbms_output.put_line('雇员姓名:'||emp_record.ename);
7         dbms_output.put_line('雇员工资:'||emp_record.sal);
8     end loop;
9 end;

②使用for遍历显式游标

 1 declare
 2     cursor cur_emp
 3 is
 4     select * from emp where deptno=30;
 5 begin
 6     for emp_record in cur_emp
 7     loop
 8         dbms_output.put_line('雇员编号:'||emp_record.empno);
 9         dbms_output.put_line('雇员姓名:'||emp_record.ename);
10         dbms_output.put_line('雇员职务:'||emp_record.job);
11     end loop;
12 end;
原文地址:https://www.cnblogs.com/niwotaxuexiba/p/9462205.html