Oracle数据库的存储过程进行循环时,有两种常用的方式
1、静态游标:显示游标
--A、简单显示游标
declare
cursor cursor_emp is select * from emp;--声明一个游标
v_emp_record emp%rowtype;
begin
--打开游标
open cursor_emp;
loop
--提取行到变量
fetch cursor_emp into v_emp_record;
--判断是否有数据
exit when cursor_emp%notfound;
--显示数据
dbms_output.put_line('员工编号:'||v_emp_record.empno||',姓名:'||v_emp_record.ename);
end loop;
--关闭游标
--B、基于游标定义记录变量
declare
cursor cursor_emp is select * from emp;--声明一个游标
v_emp_record emp%rowtype;
begin
--打开游标:如果没有打开
if not cursor_emp%isopen then
open cursor_emp;
end if;
loop
--提取行到变量
fetch cursor_emp into v_emp_record;
--判断是否有数据
exit when cursor_emp%notfound;
--显示数据
dbms_output.put_line('员工编号:'||v_emp_record.empno||',姓名:'||v_emp_record.ename);
end loop;
--关闭游标
close cursor_emp;
end;
--C、带参数显式游标
declare
cursor cursor_emp(no number) is select * from emp where deptno=no;--声明一个带参数的显示游标
v_emp_record emp%rowtype;
begin
--打开游标:如果没有打开
if not cursor_emp%isopen then
open cursor_emp(10);
end if;
loop
--提取行到变量
fetch cursor_emp into v_emp_record;
--判断是否有数据
exit when cursor_emp%notfound;
--显示数据
dbms_output.put_line('员工编号:'||v_emp_record.empno||',姓名:'||v_emp_record.ename);
end loop;
--关闭游标
close cursor_emp;
end;
--D、循环游标
declare
cursor cursor_emp is select * from emp;
begin
--for循环
for i in cursor_emp loop
dbms_output.put_line('员工编号:'||i.empno||',姓名:'||i.ename);
end loop;
end;
--for循环
declare
--cursor cursor_emp is select * from emp;
begin
--for循环:动态游标
for i in (select * from emp) loop
dbms_output.put_line('员工编号:' || i.empno || ',姓名:' || i.ename);
end loop;
end;