2009-07-23 6 views
0

je utilise oracle démo schéma scott pour faire un test plsql (les données dans ce schéma ne sont jamais modifiées). J'ai écrit le programme suivant pour obtenir le nombre d'employés de chaque département. le problème est, il y a seulement 4 départements, mais mon programme de sortie 5 rangée. je ne peux pas trouver la raison, tout le monde peut aider? grand merci.plsql curseur itératif problème

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; 

Répondre

3

Si vous publiez le deptno dans le dbms_output, vous verrez la raison.

Vous devez changer ces deux lignes:

fetch departments into a_department; 
exit when departments%notfound; 

% NOTFOUND est sans signification avant la récupération initiale; votre code comptait les emps dans le dernier département deux fois.

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;