2017-04-26 80 views
0

我正在尝试使用简单的循环显示来自表“employees”的前5条记录的名字,工资和工作id。但是,在输出中只显示第一条记录。请提出我写错的代码,以及我应该如何纠正错误。以下是代码。 Also, I have attached the screenshot of the result.PL/SQL:循环,获取记录

declare 
v_i number(2) ; 
v_fname employees.first_name%type; 
v_sal employees.salary%type; 
v_job employees.job_id%type; 

begin 
     v_i:=1; 
     loop 
     select first_name, salary, job_id into v_fname, v_sal, v_job from 
     employees where rownum=v_i; 
     dbms_output.put_line('Record ' || v_i || ': '); 
     dbms_output.put_line('First Name: ' || v_fname); 
     dbms_output.put_line('Salary: ' || v_sal); 
     dbms_output.put_line('Job Title: ' || v_job); 
     dbms_output.put_line(chr(10)); 
     v_i := v_i +1; 
     exit when v_i >= 5; 
     end loop; 
end;  
+0

我认为它说,它不具有的rownum = 2 ......没有发现任何数据.... – user5328504

+0

肯定。但是,表格中有117条记录。我不知道那里可能会出现什么问题。 –

+0

问题是plsql关键字rownum。你可以做的事情是首先获得所有5个项目 – user5328504

回答

1

你不能用你的方式使用ROWNUM。它只适用于第一选择v_i=1;尝试一下:选择ROWNUM=2将不会返回任何内容!

下面是如何使用隐式游标做到这一点:

declare 
    v_i number(2) ; 

begin 
     v_i:=1; 
    for x in (
     select first_name, salary, job_id into v_fname, v_sal, v_job from 
     employees where rownum <=5) loop 
      dbms_output.put_line('Record ' || v_i || ': '); 
      dbms_output.put_line('First Name: ' || x.first_name); 
      dbms_output.put_line('Salary: ' || x.salary); 
      dbms_output.put_line('Job Title: ' || x.job_id); 
      dbms_output.put_line(chr(10)); 
      v_i := v_i +1; 
     end loop; 
end;