本文介绍了Pl/SQL过程将最高GPA排名到最低的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我试图编写一个过程,该过程将使用最高的GPA = 1排名最高,依此类推.我被困的地方是

so I am trying to write a procedure that will rank the highest GPA= 1 and so on using a cursor. Where i am stuck is

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等级的正确方法.

I get stuck here in the loop(right now its just a place holder). I am not sure the correct way to set each GPA's rank.

推荐答案

oracle中有RANK函数. 在此处查看更多信息.

There is RANK function in oracle. 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;

这篇关于Pl/SQL过程将最高GPA排名到最低的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-18 21:45