次の2つのテーブルがあります。
USERID を入力すると、ランキングを取得できるプロシージャ/関数を作成したいと考えています。ランキングは、合計ランク ポイントにトークンを掛けて、ユーザーが獲得した合計トークンで割った値に基づいています。
ランクに相当する数値は次のとおりです: 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;
/