【发布时间】:2016-07-02 18:36:51
【问题描述】:
我正在开发一个桌面应用程序,该应用程序的工作原理类似于 Risiko! 的游戏,基于一些数据库程序。
我需要为每个玩家分配一组彼此不相等的行,分配给其他玩家。
我尝试过这样的事情,但没有用:
`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_随机码:
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;
【问题讨论】:
-
您的问题是什么?样本数据和期望的结果会有所帮助。
-
有很多方法可以随机化事物,但发布您的结构和一些示例数据会有所帮助。那么另一个问题是你真的想要随机的还是更多的循环来平衡你的领土?
-
平衡随机
-
不要将 SOLVED 放在标题中。接受解决您问题的答案。如果您自己解决了问题,请将解决方案添加为答案并接受。
标签: sql oracle stored-procedures plsql