--第一步:声明游标和行变量;
cursor 游标名(参数…) is select语句;
变量名 类型;
--第二步:打开游标;
open 游标名;
--第三步:获取游标中的每一行数据;
fetch 游标 into 行变量;
--每调用一次fetch,就相当于把指针向下移动一行,然后再把该行记录赋给一个行变量。
--第四步:关闭游标;
close 游标名;
--定义游标
cursor 游标名称 is 查询语句
open 游标;
loop--获取游标中的值
fetch 游标 into 变量;
--退出条件exitwhen 游标%notfound;
endloop;
close 游标;
--获取emp表中,的员工名称和 工资
declare
--定义游标
cursor emplist isselect * from emp;
--定义行类型接收值
pemp emp%rowtype;
begin--迭代open emplist;
loop
fetch emplist into pemp;
exitwhen emplist%notfound;--退出条件--打印输出信息
dbms_output.put_line('员工名称:'||pemp.ename||',工资:'||pemp.sal);
endloop;
close emplist;
end;
--找出10号部门的员工,给他们每人加薪:100
declare
--定义游标
cursor emplist is select empno,ename from emp where deptno=10;--引用类型
pempno emp.empno%type;
pename emp.ename%type;
beginopen emplist;
loop
fetch emplist into pempno,pename;
exit when emplist%notfound;
dbms_output.put_line(pempno||'=========加薪100========='||pename);
--更新工资update emp set sal = sal+100where empno = pempno;commit;end loop;
close emplist;
end;
--隐式游标(删除10号部门的所有员工)
begin
delete from emp where deptno=10;
if sql%found then
dbms_output.put_line('删除成功,一共删除了'||sql%rowcount||'条记录');
else
dbms_output.put_line('删除失败');
endif;
end;
--获取emp表中,20号部门的员工名称和 工资
declare
cur_deptno number(10):=&dept;
--定义游标
cursor emplist
is
select *
from emp
where deptno=cur_deptno;--定义行类型接收值
pemp emp%rowtype;
begin
--迭代
open emplist;
loop
fetch emplist into pemp;
exit when emplist%notfound;--退出条件--打印输出信息
dbms_output.put_line('员工名称:'||pemp.ename||',工资:'||pemp.sal);
end loop;
close emplist;
end;
--获取emp表中,20号部门的员工名称和 工资
declare
cur_deptno number(10):=&dept;
--定义游标
cursor emplist(cur_deptno emp.deptno%type)
isselect *
from emp
where deptno=cur_deptno;
--定义行类型接收值
pemp emp%rowtype;
begin--迭代open emplist(cur_deptno);
loop
fetch emplist into pemp;
exitwhen emplist%notfound;--退出条件--打印输出信息
dbms_output.put_line('员工名称:'||pemp.ename||',工资:'||pemp.sal);
endloop;
close emplist;
end;