PL/SQL Example Roulette
set serveroutput on
DECLARE
i NUMBER := 0;
x BINARY_INTEGER;
y VARCHAR2(2);
flag VARCHAR2(5);
sign NUMBER := 1;
bet NUMBER := 1;
next_bet NUMBER := 1;
total NUMBER := 0;
count_1 NUMBER := 0;
count_2 NUMBER := 0;
count_4 NUMBER := 0;
count_8 NUMBER := 0;
count_16 NUMBER := 0;
count_32 NUMBER := 0;
count_64 NUMBER := 0;
count_128 NUMBER := 0;
count_256 NUMBER := 0;
count_512 NUMBER := 0;
count_1024 NUMBER := 0;
count_2048 NUMBER := 0;
PROCEDURE count_bet is
BEGIN
IF bet = 1 THEN
count_1 := count_1 + 1;
ELSIF bet = 2 THEN
count_2 := count_2 + 1;
ELSIF bet = 4 THEN
count_4 := count_4 + 1;
ELSIF bet = 8 THEN
count_8 := count_8 + 1;
ELSIF bet = 16 THEN
count_16 := count_16 + 1;
ELSIF bet = 32 THEN
count_32 := count_32 + 1;
ELSIF bet = 64 THEN
count_64 := count_64 + 1;
ELSIF bet = 128 THEN
count_128 := count_128 + 1;
ELSIF bet = 256 THEN
count_256 := count_256 + 1;
ELSIF bet = 512 THEN
count_512 := count_512 + 1;
ELSIF bet = 1024 THEN
count_1024 := count_1024 + 1;
ELSE
count_2048 := count_2048 + 1;
END IF;
END;
PROCEDURE proc_loop is
BEGIN
x := ABS(MOD(DBMS_RANDOM.RANDOM,100)) + 1;
bet := next_bet;
IF x < 48 THEN
flag := 'WIN ';
next_bet := 1;
sign := 1;
ELSE
flag := 'LOOSE';
next_bet := bet * 2;
sign := -1;
END IF;
i := i + 1;
total := total + (bet*sign);
DBMS_OUTPUT.PUT_LINE('i: '||lpad(i,6)||' x: '||lpad(x,2)||' '||flag||' Bet: $'||lpad(bet,3)||' Total: $'||total);
count_bet();
END;
PROCEDURE proc1 is
BEGIN
DBMS_OUTPUT.PUT_LINE('Proc1');
DBMS_RANDOM.INITIALIZE(123456789);
FOR i IN 1..10000 LOOP
proc_loop();
END LOOP;
DBMS_RANDOM.TERMINATE;
DBMS_OUTPUT.PUT_LINE('Results:');
DBMS_OUTPUT.PUT_LINE('$ 1.00 Bets: '||count_1);
DBMS_OUTPUT.PUT_LINE('$ 2.00 Bets: '||count_2);
DBMS_OUTPUT.PUT_LINE('$ 4.00 Bets: '||count_4);
DBMS_OUTPUT.PUT_LINE('$ 8.00 Bets: '||count_8);
DBMS_OUTPUT.PUT_LINE('$ 16.00 Bets: '||count_16);
DBMS_OUTPUT.PUT_LINE('$ 32.00 Bets: '||count_32);
DBMS_OUTPUT.PUT_LINE('$ 64.00 Bets: '||count_64);
DBMS_OUTPUT.PUT_LINE('$ 128.00 Bets: '||count_128);
DBMS_OUTPUT.PUT_LINE('$ 256.00 Bets: '||count_256);
DBMS_OUTPUT.PUT_LINE('$ 512.00 Bets: '||count_512);
DBMS_OUTPUT.PUT_LINE('$1024.00 Bets: '||count_1024);
DBMS_OUTPUT.PUT_LINE('$2048.00 Bets: '||count_2048);
DBMS_OUTPUT.PUT_LINE('Total:'||(count_1+count_2+count_4+count_8+count_16+count_32+count_64+count_128+count_256+count_512+count_1024+count_2048));
END proc1;
BEGIN
DBMS_OUTPUT.PUT_LINE('MAIN');
dbms_output.enable(1000000);
proc1();
END;
/
Output:
SQL> /
MAIN
Proc1
i: 1 x: 38 WIN Bet: $ 1 Total: $1
i: 2 x: 81 LOOSE Bet: $ 1 Total: $0
i: 3 x: 69 LOOSE Bet: $ 2 Total: $-2
i: 4 x: 48 LOOSE Bet: $ 4 Total: $-6
i: 5 x: 20 WIN Bet: $ 8 Total: $2
i: 6 x: 93 LOOSE Bet: $ 1 Total: $1
i: 7 x: 32 WIN Bet: $ 2 Total: $3
i: 8 x: 46 WIN Bet: $ 1 Total: $4
i: 9 x: 40 WIN Bet: $ 1 Total: $5
i: 10 x: 65 LOOSE Bet: $ 1 Total: $4
...
i: 264 x: 92 LOOSE Bet: $ 32 Total: $56
i: 265 x: 49 LOOSE Bet: $ 64 Total: $-8
i: 266 x: 60 LOOSE Bet: $128 Total: $-136
i: 267 x: 59 LOOSE Bet: $256 Total: $-392
...
i: 1918 x: 18 WIN Bet: $ 1 Total: $911
i: 1919 x: 81 LOOSE Bet: $ 1 Total: $910
i: 1920 x: 95 LOOSE Bet: $ 2 Total: $908
i: 1921 x: 54 LOOSE Bet: $ 4 Total: $904
i: 1922 x: 94 LOOSE Bet: $ 8 Total: $896
i: 1923 x: 52 LOOSE Bet: $ 16 Total: $880
i: 1924 x: 49 LOOSE Bet: $ 32 Total: $848
i: 1925 x: 65 LOOSE Bet: $ 64 Total: $784
i: 1926 x: 75 LOOSE Bet: $128 Total: $656
i: 1927 x: 88 LOOSE Bet: $256 Total: $400
i: 1928 x: 76 LOOSE Bet: $512 Total: $-112
i: 1929 x: 20 WIN Bet: $102 Total: $912
i: 1930 x: 7 WIN Bet: $ 1 Total: $913
i: 1931 x: 85 LOOSE Bet: $ 1 Total: $912
...
i: 9990 x: 49 LOOSE Bet: $ 2 Total: $4733
i: 9991 x: 16 WIN Bet: $ 4 Total: $4737
i: 9992 x: 73 LOOSE Bet: $ 1 Total: $4736
i: 9993 x: 75 LOOSE Bet: $ 2 Total: $4734
i: 9994 x: 82 LOOSE Bet: $ 4 Total: $4730
i: 9995 x: 80 LOOSE Bet: $ 8 Total: $4722
i: 9996 x: 95 LOOSE Bet: $ 16 Total: $4706
i: 9997 x: 44 WIN Bet: $ 32 Total: $4738
i: 9998 x: 86 LOOSE Bet: $ 1 Total: $4737
i: 9999 x: 87 LOOSE Bet: $ 2 Total: $4735
i: 10000 x: 83 LOOSE Bet: $ 4 Total: $4731
Results:
$ 1.00 Bets: 4739
$ 2.00 Bets: 2481
$ 4.00 Bets: 1321
$ 8.00 Bets: 706
$ 16.00 Bets: 360
$ 32.00 Bets: 199
$ 64.00 Bets: 99
$ 128.00 Bets: 51
$ 256.00 Bets: 27
$ 512.00 Bets: 12
$1024.00 Bets: 4
$2048.00 Bets: 1
Total:10000
PL/SQL procedure successfully completed.