PL / SQL:循环,获取记录

时间:2017-04-26 03:39:00

标签: plsql

我试图从表格中显示前5条记录的名字,工资和工作ID"员工"使用一个简单的循环。但是,在输出中仅显示第1条记录。请告诉我在我编写的代码中出错的地方以及我应该采取哪些措施来纠正它。以下是代码。 Also, I have attached the screenshot of the result.

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;     

1 个答案:

答案 0 :(得分: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;