2017-04-26 5 views
0

シンプルなループを使用して、 "employees"テーブルから最初の5レコードのファーストネーム、給与およびジョブIDを表示しようとしています。しかし、出力では第1レコードのみが表示されています。私が書いたコードでどこが間違っているのか、それを修正するために何をすべきかを教えてください。以下はそのコードです。 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

私はそれが= 2 ROWNUMを持っていないと言うと思います...何もデータが見つかりませんでした.... – 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;  
関連する問題