grandnational
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| grandnational [2021/04/25 09:30] – z0hpvk | grandnational [2025/03/08 22:24] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ===== Grand National Sweepstake ===== | + | ===== Grand National Sweepstake |
| + | |||
| + | ==== Create User ==== | ||
| + | |||
| + | <code sql> | ||
| + | CREATE USER GRANDNATIONAL IDENTIFIED BY horses; | ||
| + | GRANT CREATE SESSION TO GRANDNATIONAL; | ||
| + | GRANT CREATE TABLE TO GRANDNATIONAL; | ||
| + | GRANT CREATE PROCEDURE TO GRANDNATIONAL; | ||
| + | GRANT CREATE VIEW TO GRANDNATIONAL; | ||
| + | GRANT CREATE SEQUENCE TO GRANDNATIONAL; | ||
| + | GRANT UNLIMITED TABLESPACE TO GRANDNATIONAL; | ||
| + | </ | ||
| + | |||
| + | ==== Create tables and insert data ==== | ||
| <code sql> | <code sql> | ||
| Line 6: | Line 20: | ||
| Create table participants (ID number(2) generated by default on null as identity, | Create table participants (ID number(2) generated by default on null as identity, | ||
| Name varchar2(20), | Name varchar2(20), | ||
| - | | + | constraint unique_name unique (name)); |
| insert into participants (name) values (' | insert into participants (name) values (' | ||
| insert into participants (name) values (' | insert into participants (name) values (' | ||
| Line 13: | Line 27: | ||
| insert into participants (name) values (' | insert into participants (name) values (' | ||
| insert into participants (name) values (' | insert into participants (name) values (' | ||
| - | </ | ||
| - | <code sql> | ||
| -- List of horses entered into the Grand National | -- List of horses entered into the Grand National | ||
| Drop table horses; | Drop table horses; | ||
| Line 60: | Line 72: | ||
| insert into horses values (39,' | insert into horses values (39,' | ||
| insert into horses values (40,' | insert into horses values (40,' | ||
| + | |||
| + | -- Lists the entrants and the horses that they got | ||
| + | drop table sweepstake; | ||
| + | create table sweepstake (PlayerID number(2), | ||
| + | | ||
| + | HorseName varchar2(40), | ||
| + | </ | ||
| + | |||
| + | ==== Create procedures ==== | ||
| + | <code plsql> | ||
| + | -- Initialise the SWEEPSTAKE table | ||
| + | create or replace procedure init as | ||
| + | begin | ||
| + | EXECUTE IMMEDIATE ' | ||
| + | EXECUTE IMMEDIATE ' | ||
| + | end; | ||
| + | / | ||
| + | |||
| + | -- Performs one round of the draw. | ||
| + | create or replace procedure OneCycle as | ||
| + | Cursor C1 is select PlayerID, PlayerName, horseno, HorseName from ( | ||
| + | | ||
| + | HorseNo, HorseName from sweepstake where playerid is null), | ||
| + | (select id PlayerID, name PlayerName from participants) | ||
| + | where row_num = PlayerID; | ||
| + | BEGIN | ||
| + | FOR a IN C1 | ||
| + | LOOP | ||
| + | EXECUTE IMMEDIATE ' | ||
| + | using a.PlayerID, a.HorseNo; | ||
| + | END LOOP; | ||
| + | END; | ||
| + | / | ||
| + | |||
| + | -- Generate the sweepstake data | ||
| + | create or replace procedure GenSweepstake as | ||
| + | Cursor C1 is select name, horseno, horsename | ||
| + | from participants, | ||
| + | where id = playerid order by horseno; | ||
| + | NoParticipants number(2); | ||
| + | NoHorses | ||
| + | NoCycles | ||
| + | begin | ||
| + | select count(*) into NoParticipants from participants; | ||
| + | select count(*) into NoHorses from horses; | ||
| + | NoCycles := ceil(NoHorses/ | ||
| + | init; | ||
| + | FOR a IN 1..NoCycles | ||
| + | LOOP | ||
| + | OneCycle; | ||
| + | END LOOP; | ||
| + | |||
| + | dbms_output.put_line(' | ||
| + | dbms_output.put_line(' | ||
| + | dbms_output.put_line(' | ||
| + | FOR b in C1 | ||
| + | LOOP | ||
| + | | ||
| + | END LOOP; | ||
| + | end; | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | ==== Create Views ==== | ||
| + | |||
| + | <code sql> | ||
| + | create or replace view v_sweepstake as | ||
| + | | ||
| + | from participants, | ||
| + | where id = playerid | ||
| + | order by horseno; | ||
| + | |||
| + | create or replace view v_check as | ||
| + | | ||
| + | group by name | ||
| + | order by 2 DESC; | ||
| + | </ | ||
| + | |||
| + | ==== Generate Sweepstake ==== | ||
| + | |||
| + | <code plsql> | ||
| + | set serveroutput on | ||
| + | BEGIN | ||
| + | GenSweepstake(); | ||
| + | END; | ||
| + | / | ||
| </ | </ | ||
grandnational.1619343021.txt.gz · Last modified: (external edit)
