我使用oracle演示模式 scott 来进行一些plsql测试(该模式中的数据永远不会更改)。我编写了以下程序来获取每个部门的员工编号。问题是,只有4个部门,但我的程序输出5行。我找不到原因,任何人都可以帮忙吗?非常感谢。
declare
cursor employees(department_id number) is
select count(*) howmany
from scott.emp
where deptno=department_id;
employees_per_dept employees%rowtype;
cursor departments is
select *
from scott.dept;
a_department departments%rowtype;
begin
dbms_output.put_line('-----------------------------------');
open departments;
loop
exit when departments%notfound;
fetch departments into a_department;
open employees(a_department.deptno);
fetch employees into employees_per_dept;
dbms_output.put_line(employees_per_dept.howmany);
close employees;
end loop;
close departments;
dbms_output.put_line('-----------------------------------');
end;
答案 0 :(得分:4)
如果在dbms_output中输出deptno,你会看到原因。
您需要切换这两行:
fetch departments into a_department;
exit when departments%notfound;
在初始FETCH之前,%NOTFOUND没有意义;你的代码在最后一个部门计算两次的emps。
答案 1 :(得分:0)
declare
cursor cl(ccode varchar2) is
Select * from employees where department_id=ccode;
z cl%rowtype;
cnt number:=0;
begin
Open cl('90');
fetch cl into Z;
while (cl%found) loop
dbms_output.put_line ( 'nsme is ' || z.last_name);
fetch cl into Z;
cnt := cnt +1;
end loop;
dbms_output.put_line (cnt);
close cl;
end;