2015-11-06 39 views
0

因此我正在嘗試編寫一個過程,它將使用遊標對最高GPA = 1等進行排名。我在哪裏卡住是將最高GPA評爲最低的P1/SQL過程

declare 
snum students.snum%type; 
sname students.sname%type; 
GPA students.GPA%type; 
begin 
for Rec in 
    (select snum,sname,GPA 
     from students 
     order by GPA desc)loop 
    dbms_output.put_line(rec); 
    end loop; 
end; 

我深陷其中在環(現在它只是一個佔位符)。我不確定設定每個GPA排名的正確方法。

+2

不要使用遊標。使用'rank()'或'row_number()'。 –

回答

2

oracle中有RANK函數。 See more here.

例子:

declare 
v_snum students.snum%type; --Avoid to use "variable name" as same as "column name" 
v_sname students.sname%type; 
v_GPA students.GPA%type; 
begin 
for rec in 
    (select snum, 
      sname, 
      GPA, 
      RANK() OVER (ORDER BY GPA desc) as srank 
     from students) 
loop 
    dbms_output.put_line(rec.snum || '|' || rec.sname || '|' || rec.GPA || '|' || rec.srank); 
end loop; 
end;