【学亮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;