我有以下 2 个表:
我想创建一个程序/函数,在其中输入 USERID 后,我将能够获得他们的排名。排名基于总排名点乘以代币除以用户获得的总代币。
Rank 数值等效如下:SU = 25,EX = 9,VG = 5,G = 3,F = 1
例如,根据我的数据,userid 45 的排名是 = [25(4) + 3(5)]/4 + 5 = 12.77(这将是我的输出)
这是我的尝试......我搞砸了数学部分,它只显示“用户排名是:”(空白/排名没有价值)
create or replace procedure rank
(para_userid IN number, para_ranking OUT number)
is
n number;
rank number;
r number;
CURSOR c1(uid number) IS
select decode(rank, 'SU', 25, 'EX', 9, 'VG', 5, 'G', 3, 'F',1) FROM A
WHERE para_userid= uid;
begin
n := 0;
para_ranking := 0;
OPEN c1(para_userid);
LOOP
FETCH c1 INTO rank;
EXIT WHEN c1%NOTFOUND;
r := r * rank;
n := n + 1;
END LOOP;
IF n > 0 THEN
para_ranking := r / n;
END IF;
CLOSE c1;
END;
declare
x number;
begin
rank(45, x);
DBMS_OUTPUT.PUT_LINE('User Ranking is: '||x);
end;
/