私はいくつかのデータベース手順に基づいて、Risiko!のゲームのように動作するデスクトップアプリケーションを開発しています。SQLクエリ:別のテーブルの異なる行にテーブルの列のランダムな異なる値を割り当てる方法はありますか
私は、他のプレイヤーに割り当てられた互いに等しいではない行の合計を各プレイヤーに割り当てる必要があります。
私はこのような何かをしようとしましたが、動作しません:
`create or replace PROCEDURE "giveterritory"
(idpartita NUMBER,nr_partecipanti number)
is
begin
DECLARE
CURSOR cur_file IS
SELECT *
FROM Player
WHERE idgame = Player.idgame ;
var_cur cur_file%ROWTYPE;
cont number ;
nr_territories_gioc_prec number ;
G1_Terr int ;
G2_Terr int ;
G3_Terr int ;
G1_ID number;
G2_ID number;
G3_ID number;
begin
cont:=0 ;
for var_cur in cur_file
loop
cont := cont + 1 ;
update territory
set Player_owner = var_cur.id_Player
where ROWNUM = MOD(MOD (number_RANDOM(),42) ,ROWNUM);
G1_Terr := var_cur.number_territories_tot ; -- mi salvo i territories del primo Player
G1_ID := var_cur.id_Player ;
end if ;
if (cont=2) then
update territory
set Player_owner = var_cur.id_Player
where ROWNUM = MOD(MOD (number_RANDOM(),42 -G1_Terr) , ROWNUM) and id_territory NOT IN (select Player_owner from territory where ;
G2_Terr := var_cur.number_territories_tot ;
end if ;
if (cont=3) then
update territory
set Player_owner = var_cur.id_Player
where ROWNUM <= 42 - G1_Terr - G2_Terr;
--where ROWNUM <= 42 - var_cur.number_territories_tot * 2 ;
G3_Terr := var_cur.number_territories_tot ;
end if ;
end loop;
end;
end;`
number_randomコード:私が正しく理解していれば
create or replace FUNCTION "NUMBER_RANDOM"
return NUMBER
is
numbrndm int;
begin
select dbms_random.value(1,99999999) into numbrndm
from dual;
return numbrndm;
end;
ご質問はありますか?サンプルデータと望ましい結果が役立ちます。 –
物事を無作為化する方法はたくさんありますが、構造とサンプルデータを投稿すると便利です。次に、もう1つの質問は、あなたの地域がバランスが取れるようにランダムに、あるいはより多くのラウンドロビンを本当にしたいのですか? – Matt
平衡化とランダム化 –