游标
游标主要分两类动态和静态游标,静态游标是编译时知道明确的select语句的游标,静态游标分类两种,显示游标和静态游标,这里只说显示游标
显示游标
declare name emp.ename%type; sal emp.sal%type; --声明两个变量 cursor emp_currsor is --声明游标 select ename,sal from emp; begin open emp_currsor; --第一步打开游标 loop fetch emp_currsor into name,sal; --fetch提取游标 exit when emp_currsor%notfound; --判断游标是否还有值 dbms_output.put_line('第'||emp_currsor%rowcount||'个雇员'||name||sal); end loop; close emp_currsor; --最后一步关闭游标 end;
显示游标属性
%found:只有在DML语句影响一行或者多行时,%found属性才返回true
%notfound:如果没有影响任何行返回true
%rowcount:属性返回DML语句影响的行数.如果DML语句没有影响任何行,则%rowcount属性返回0
%isopen:返回游标是否已被打开
循环读取游标
declare cursor cu_emp is select * from emp; lr_emp cu_emp%rowtype; --声明变量 begin for lr_emp in cu_emp loop dbms_output.put_line('empName: ' || lr_emp.ename); end loop; end;
结果:
存储过程
--创建存储过程 create or replace procedure proc_getEmpList(v_empno number,vara varchar) is --遍历游标 cursor cu_emp is select * from emp; lr_emp cu_emp%rowtype; --声明变量 begin dbms_output.put_line('v_empno: ' || v_empno||'vara:'||vara); for lr_emp in cu_emp loop dbms_output.put_line('empName: ' || lr_emp.ename); end loop; end; --调用 begin proc_getEmpList(123,'00'); end;