Fallstar

Untitled

May 28th, 2015
307
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 11.82 KB | None | 0 0
  1.  
  2. --1
  3. SET SERVEROUTPUT ON;
  4. DECLARE
  5.  
  6.     v_nbJ NUMBER;
  7.  
  8. BEGIN
  9.    
  10.     SELECT COUNT(idJoueur) INTO v_nbJ
  11.     FROM Joueurs j
  12.     WHERE j.idClub='C1';
  13.    
  14.     DBMS_OUTPUT.PUT_LINE('Nb joueurs club 1' || v_nbJ);
  15.    
  16. END;
  17.  
  18.  
  19. --2
  20. ACCEPT v_nbC PROMPT 'Entrez identifiant du club'
  21. DECLARE
  22.  
  23.     v_nbJ NUMBER;
  24.  
  25. BEGIN
  26.    
  27.     SELECT COUNT(idJoueur) INTO v_nbJ
  28.     FROM Joueurs j
  29.     WHERE j.idClub='&v_nbC';
  30.    
  31.     DBMS_OUTPUT.PUT_LINE('Nb joueurs club  ' || TO_CHAR('&v_nbC') || ' : ' || v_nbJ);
  32.    
  33. END;
  34.  
  35. --3
  36. ACCEPT v_idC PROMPT 'Entrez identifiant du club'
  37. DECLARE
  38.  
  39.     v_nbJ NUMBER;
  40.     v_nbC NUMBER;
  41.  
  42. BEGIN
  43.  
  44.     SELECT COUNT(*) INTO v_nbC
  45.     FROM Clubs
  46.     WHERE idClub='&v_idC';
  47.    
  48.    
  49.     IF  v_nbC= 1 THEN
  50.         SELECT COUNT(idJoueur) INTO v_nbJ
  51.         FROM Joueurs j
  52.         WHERE j.idClub='&v_idC';
  53.         DBMS_OUTPUT.PUT_LINE('Nb joueurs club &v_idC' || ' : ' || v_nbJ);
  54.     ELSE
  55.         DBMS_OUTPUT.PUT_LINE('Le club &v_idC ne se trouve pas dans la base.');
  56.     END IF;
  57.    
  58.    
  59. END;
  60.  
  61. --4
  62. ACCEPT v_idC PROMPT 'Entrez identifiant du club'
  63. DECLARE
  64.  
  65.     v_nbJ NUMBER;
  66.     v_Club CHAR(10);
  67. BEGIN
  68.     SELECT idClub INTO v_Club
  69.     FROM Clubs
  70.     WHERE idClub='&v_idC';
  71.    
  72.     SELECT COUNT(idJoueur) INTO v_nbJ
  73.     FROM Joueurs j
  74.     WHERE j.idClub='&v_idC';
  75.    
  76.     DBMS_OUTPUT.PUT_LINE('Nb joueurs club &v_idC' || ' : ' || v_nbJ);
  77.    
  78.     EXCEPTION
  79.         WHEN NO_DATA_FOUND THEN
  80.             DBMS_OUTPUT.PUT_LINE('Le club &v_idC ne se trouve pas dans la base.');
  81.        
  82.        
  83.    
  84. END;
  85.  
  86. --5
  87. DECLARE
  88.     r_tour Tournois%ROWTYPE;
  89. BEGIN
  90.     SELECT * INTO r_tour
  91.     FROM Tournois
  92.     WHERE idTounoi='T1';
  93.    
  94.     DBMS_OUTPUT.PUT_LINE('id : ' || r_tour.idTournoi || ' | nom : ' || r_tour.nomTournoi || ' | lieu : ' ||
  95.      r_tour.lieuTournoi || ' | nombre de ronde : ' || r_tour.nbRondesTournoi);
  96.    
  97. END;
  98.  
  99. --6
  100. CREATE OR REPLACE FUNCTION nbJoueursParClub(p_idClub IN Clubs.idClub%TYPE) RETURN NUMBER IS
  101.     v_res NUMBER;
  102. BEGIN
  103.     SELECT COUNT(idJoueur) INTO v_res
  104.     FROM Joueurs j
  105.     JOIN Clubs c ON c.idClub=j.idClub
  106.     WHERE c.idClub=p_idClub;
  107.    
  108.     IF v_res = 0 THEN
  109.         RETURN NULL;
  110.     ELSE
  111.         RETURN v_res;
  112.     END IF;
  113. END;
  114.  
  115.  
  116. --
  117. --
  118. --
  119.  
  120.  
  121. --13
  122. CREATE OR REPLACE FUNCTION categorieJoueur(p_dateNaissance IN Joueurs.dateNaissanceJoueur%TYPE, p_sexe IN Joueurs.sexeJoueur%TYPE) RETURN VARCHAR IS
  123.    
  124. BEGIN
  125.     IF p_dateNaissance >= '31/12/1994' THEN
  126.         RETURN ('Jun' || p_sexe);
  127.     ELSE
  128.         IF p_dateNaissance >= '1/1/1960' THEN
  129.             RETURN ('Sen'||p_sexe);
  130.    
  131.         ELSE
  132.             RETURN ('Vet'||p_sexe);
  133.         END IF;
  134.     END IF;
  135. END;
  136.  
  137. --14
  138. CREATE OR REPLACE PROCEDURE affichageResultatsRonde(p_idTounoi IN Parties.idTournoi%TYPE, p_numRonde IN Parties.numRonde%TYPE) IS
  139.    
  140. BEGIN
  141.  
  142.     FOR v_row IN (SELECT jb.nomJoueur AS nomB, jb.prenomJoueur AS preB, categorieJoueur(jb.dateNaissanceJoueur, jb.sexeJoueur) AS catB, jb.eloJoueur AS eloB, p.resultatPartie AS res, jn.nomJoueur AS nomN, jn.prenomJoueur AS preN, categorieJoueur(jn.dateNaissanceJoueur, jn.sexeJoueur) AS catN, jn.eloJoueur AS eloN
  143.         FROM Parties p
  144.         JOIN Joueurs jb ON p.idJoueurBlancs=jb.idJoueur
  145.         JOIN Joueurs jn ON p.idJoueurNoirs=jn.idJoueur
  146.         WHERE p.idTournoi=p_idTounoi
  147.         AND p.numRonde=p_numRonde
  148.         )
  149.     LOOP
  150.         DBMS_OUTPUT.PUT_LINE(v_row.nomB || ' ' || v_row.preB || ' ' || v_row.catB || ' ' || v_row.eloB || ' ' || v_row.res || ' ' || v_row.nomN || ' ' || v_row.preN || ' ' || v_row.catN || ' ' || v_row.eloN);
  151.     END LOOP;
  152. END;
  153.    
  154. --15
  155. CREATE OR REPLACE PROCEDURE affichageInfosJoueur(p_idJoueur IN Joueurs.idJoueur%TYPE) IS
  156.     v_player Joueurs%ROWTYPE;
  157. BEGIN
  158.     SELECT *
  159.     INTO v_player
  160.     FROM Joueurs
  161.     WHERE idJoueur=p_idJoueur;
  162.        
  163.     DBMS_OUTPUT.PUT_LINE('Identifiant joueur : ' || v_player.idJoueur);
  164.     DBMS_OUTPUT.PUT_LINE('Nom joueur : ' || v_player.nomJoueur);
  165.     DBMS_OUTPUT.PUT_LINE('Prénom joueur : ' || v_player.prenomJoueur);
  166.     DBMS_OUTPUT.PUT_LINE('Elo joueur : ' || v_player.eloJoueur);
  167.     DBMS_OUTPUT.PUT_LINE('Catégorie joueur : ' || categorieJoueur(v_player.dateNaissanceJoueur, v_player.sexeJoueur));
  168.     DBMS_OUTPUT.PUT_LINE('Club joueur : ' || v_player.idClub);
  169.    
  170. EXCEPTION
  171.     WHEN NO_DATA_FOUND THEN
  172.         DBMS_OUTPUT.PUT_LINE('Le joueur ' || p_idJoueur || ' n éxiste pas.');
  173. END;
  174.    
  175. --16
  176. CREATE OR REPLACE FUNCTION resultatEnPoint(p_couleur IN VARCHAR, p_resultat IN Tournois.idTournoi%TYPE) RETURN NUMBER IS
  177.  
  178. BEGIN
  179.     IF p_resultat='1-0' THEN
  180.         IF p_couleur='B' THEN
  181.             RETURN 1;
  182.         ELSIF p_couleur='N' THEN
  183.             RETURN 0;
  184.         END IF;
  185.     ELSIF p_resultat='0-1' THEN
  186.         IF p_couleur='B' THEN
  187.             RETURN 0;
  188.         ELSIF p_couleur='N' THEN
  189.             RETURN 1;
  190.         END IF;
  191.     ELSIF p_resultat='1/2' THEN
  192.         RETURN 0.5;
  193.     END IF;
  194. END;
  195.  
  196. --17
  197. CREATE OR REPLACE FUNCTION couleurJoueurRonde( p_idJoueur IN Joueurs.idJoueur%TYPE, p_idTournoi IN Tournois.idTournoi%TYPE, p_numRonde IN Parties.numRonde%TYPE ) RETURN VARCHAR IS
  198.     v_nbB NUMBER;
  199.     v_nbN NUMBER;
  200. BEGIN
  201.     SELECT COUNT(idJoueurBlancs)
  202.     INTO  v_nbB
  203.     FROM Parties
  204.     WHERE idJoueurBlancs = p_idJoueur
  205.     AND idTournoi = p_idTournoi
  206.     AND numRonde = p_numRonde;
  207.    
  208.     SELECT COUNT(idJoueurNoirs)
  209.     INTO  v_nbN
  210.     FROM Parties
  211.     WHERE idJoueurNoirs = p_idJoueur
  212.     AND idTournoi = p_idTournoi
  213.     AND numRonde = p_numRonde;
  214.    
  215.     IF v_nbB = 1 THEN
  216.         RETURN 'B';
  217.     ELSIF v_nbN = 1 THEN
  218.         RETURN 'N';
  219.     ELSE
  220.         RETURN NULL;
  221.     END IF;
  222. END;
  223.        
  224.            
  225. --18           
  226. CREATE OR REPLACE FUNCTION adversaireJoueurRonde( p_idJoueur IN Joueurs.idJoueur%TYPE, p_idTournoi IN Tournois.idTournoi%TYPE, p_numRonde IN Parties.numRonde%TYPE ) RETURN Joueurs.idJoueur%TYPE IS
  227.     v_jB Joueurs.idJoueur%TYPE;
  228.     v_jN Joueurs.idJoueur%TYPE;
  229. BEGIN
  230.     SELECT idJoueurBlancs, idJoueurNoirs
  231.     INTO v_jB, v_jN
  232.     FROM Parties
  233.     WHERE (idJoueurBlancs = p_idJoueur
  234.     OR idJoueurNoirs = p_idJoueur)
  235.     AND idTournoi = p_idTournoi
  236.     AND numRonde = p_numRonde;
  237.    
  238.     IF v_jB = p_idJoueur THEN
  239.         RETURN v_jN;
  240.     ELSIF v_jN = p_idJoueur THEN
  241.         RETURN v_jB;
  242.     ELSE
  243.         RETURN NULL;
  244.     END IF;
  245. END;
  246.        
  247. --19
  248. CREATE OR REPLACE FUNCTION resultatJoueurRonde( p_idJoueur IN Joueurs.idJoueur%TYPE, p_idTournoi IN Tournois.idTournoi%TYPE, p_numRonde IN Parties.numRonde%TYPE ) RETURN Joueurs.idJoueur%TYPE IS             
  249.     v_res Parties.resultatPartie%TYPE;
  250.     v_col VARCHAR(1);
  251. BEGIN
  252.    
  253.     v_col := couleurJoueurRonde(p_idJoueur, p_idTournoi, p_numRonde);
  254.    
  255.    
  256.     SELECT resultatPartie
  257.     INTO v_res
  258.     FROM Parties
  259.     WHERE idTournoi = p_idTournoi
  260.     AND numRonde = p_numRonde
  261.     AND (idJoueurBlancs = p_idJoueur
  262.     OR idJoueurNoirs = p_idJoueur);
  263.    
  264.     RETURN (resultatEnPoint(v_col, v_res));
  265. END;
  266.  
  267. --20
  268. CREATE OR REPLACE PROCEDURE affichagePartiesJoueurTournoi( p_idJoueur IN Joueurs.idJoueur%TYPE, p_idTournoi IN Tournois.idTournoi%TYPE) IS
  269.     v_partie Parties%ROWTYPE;
  270.     v_advP Joueurs.prenomJoueur%TYPE;
  271.     v_advN Joueurs.nomJoueur%TYPE;
  272.     v_advE Joueurs.eloJoueur%TYPE;
  273.     v_advC VARCHAR(4);
  274.     v_col VARCHAR(1);
  275.     v_res NUMBER;
  276.     v_ronde Parties.numRonde%TYPE;
  277. BEGIN
  278.     FOR v_partie IN (SELECT * FROM Parties WHERE idTournoi = p_idTournoi AND (idJoueurBlancs = p_idJoueur OR idJoueurNoirs = p_idJoueur)) LOOP
  279.         IF couleurJoueurRonde(p_idJoueur, v_partie.idTournoi, v_partie.numRonde)='B' THEN
  280.             v_col := 'B';
  281.             v_res := resultatJoueurRonde(p_idJoueur, p_idTournoi, v_partie.numRonde);
  282.             SELECT nomJoueur, prenomJoueur, eloJoueur, categorieJoueur(dateNaissanceJoueur, sexeJoueur)
  283.             INTO v_advN, v_advP, v_advE, v_advC
  284.             FROM Joueurs
  285.             WHERE idJoueur = v_partie.idJoueurNoirs;           
  286.         ELSE
  287.             v_col := 'N';
  288.             v_res := resultatJoueurRonde(p_idJoueur, p_idTournoi, v_partie.numRonde);
  289.             SELECT nomJoueur, prenomJoueur, eloJoueur, categorieJoueur(dateNaissanceJoueur, sexeJoueur)
  290.             INTO v_advN, v_advP, v_advE, v_advC
  291.             FROM Joueurs
  292.             WHERE idJoueur = v_partie.idJoueurBlancs;
  293.         END IF;
  294.             v_ronde := v_partie.numRonde;
  295.             DBMS_OUTPUT.PUT_LINE('R'||v_ronde||' '||v_col||' '||v_advN||' '||v_advP||' '||v_advC||' '||v_advE||' '||v_res);
  296.     END LOOP;
  297. END;
  298.  
  299. --21
  300. CREATE OR REPLACE FUNCTION nbPointsJoueurTournoi(p_idJoueur IN Joueurs.idJoueur%TYPE, p_idTournoi IN Tournois.idTournoi%TYPE) RETURN NUMBER IS
  301.     v_res NUMBER;
  302. BEGIN
  303.     v_res := 0;
  304.     FOR v_partie IN (SELECT * FROM Parties WHERE idTournoi = p_idTournoi AND (idJoueurBlancs = p_idJoueur OR idJoueurNoirs = p_idJoueur))
  305.     LOOP
  306.         v_res := v_res + resultatJoueurRonde(p_idJoueur, p_idTournoi, v_partie.numRonde);
  307.     END LOOP;
  308.     RETURN v_res;
  309. END;
  310.  
  311.  
  312. --22
  313. CREATE OR REPLACE FUNCTION cumulatifJoueurTournoi(p_idJoueur IN Joueurs.idJoueur%TYPE, p_idTournoi IN Tournois.idTournoi%TYPE) RETURN NUMBER IS
  314.     v_res NUMBER;
  315.     v_tot NUMBER;
  316. BEGIN
  317.     v_res := 0;
  318.     v_tot := 0;
  319.     FOR v_partie IN (SELECT * FROM Parties WHERE idTournoi = p_idTournoi AND (idJoueurBlancs = p_idJoueur OR idJoueurNoirs = p_idJoueur))
  320.     LOOP
  321.         v_res := v_res + resultatJoueurRonde(p_idJoueur, p_idTournoi, v_partie.numRonde);
  322.         v_tot := v_tot + v_res;
  323.     END LOOP;
  324.     RETURN v_tot;
  325. END;
  326.  
  327. --23
  328. CREATE OR REPLACE FUNCTION performanceEloJoueurTournoi(p_idJoueur IN Joueurs.idJoueur%TYPE, p_idTournoi IN Tournois.idTournoi%TYPE) RETURN NUMBER IS
  329.     v_totEloAdv NUMBER;
  330.     v_cmp NUMBER;
  331.     v_eloAdv Joueurs.EloJoueur%TYPE;
  332. BEGIN
  333.     v_cmp := 0;
  334.     v_totEloAdv := 0;
  335.     FOR v_partie IN (SELECT * FROM Parties WHERE idTournoi = p_idTournoi AND (idJoueurBlancs = p_idJoueur OR idJoueurNoirs = p_idJoueur))
  336.     LOOP
  337.         IF couleurJoueurRonde(p_idJoueur, v_partie.idTournoi, v_partie.numRonde)='B' THEN
  338.             SELECT EloJoueur INTO v_eloAdv FROM Joueurs WHERE idJoueur = v_partie.idJoueurNoirs;
  339.             v_totEloAdv := v_totEloAdv + v_eloAdv;
  340.         ELSE
  341.             SELECT EloJoueur INTO v_eloAdv FROM Joueurs WHERE idJoueur = v_partie.idJoueurBlancs;
  342.             v_totEloAdv := v_totEloAdv + v_eloAdv;
  343.         END IF;
  344.         v_cmp := v_cmp + 1;
  345.     END LOOP;
  346.     RETURN ROUND(v_totEloAdv/v_cmp + (nbPointsJoueurTournoi(p_idjoueur, p_idTournoi)/v_cmp-0.5)*750);
  347. END;
  348.  
  349. --24
  350. CREATE OR REPLACE PROCEDURE affichageResultatJoueur(p_idJoueur IN Joueurs.idJoueur%TYPE, p_idTournoi IN Tournois.idTournoi%TYPE) IS
  351.  
  352. BEGIN
  353.     DBMS_OUTPUT.PUT_LINE('Nombre de points : ' || nbPointsJoueurTournoi(p_idJoueur, p_idTournoi));
  354.     DBMS_OUTPUT.PUT_LINE('Cumulatif : ' || cumulatifJoueurTournoi(p_idJoueur, p_idTournoi));
  355.     DBMS_OUTPUT.PUT_LINE('Performance : ' || performanceEloJoueurTournoi(p_idJoueur, p_idTournoi));
  356. END;
  357.  
  358. --25
  359. CREATE OR REPLACE FUNCTION estInvaincu(p_idJoueur IN Joueurs.idJoueur%TYPE, p_idTournoi IN Tournois.idTournoi%TYPE) RETURN NUMBER IS
  360.  
  361. BEGIN
  362.     FOR v_partie IN (SELECT * FROM Parties WHERE idTournoi = p_idTournoi AND (idJoueurBlancs = p_idJoueur OR idJoueurNoirs = p_idJoueur))
  363.     LOOP
  364.         IF resultatJoueurRonde(p_idJoueur, p_idTournoi, v_partie.numRonde) = 0 THEN
  365.             RETURN 0;
  366.         END IF;
  367.     END LOOP;
  368.     RETURN 1;
  369. END;
  370.  
  371. --26
  372. CREATE OR REPLACE FUNCTION classementJoueurTournoi(p_idJoueur IN Joueurs.idJoueur%TYPE, p_idTournoi IN Tournois.idTournoi%TYPE) RETURN NUMBER IS
  373.     v_cmp NUMBER;
  374. BEGIN
  375.     v_cmp := 1;
  376.     FOR v_joueur IN  (SELECT DISTINCT idJoueur, nomJoueur, nbPointsJoueurTournoi(idJoueur, idTournoi) AS pts, cumulatifJoueurTournoi(idJoueur, idTournoi) AS cum, performanceEloJoueurTournoi(idJoueur, idTournoi) AS perf
  377.         FROM Joueurs j
  378.         JOIN Parties p ON idJoueurBlancs=idJoueur OR idJoueurNoirs=idJoueur
  379.         WHERE idTournoi = p_idTournoi
  380.         ORDER BY pts DESC, cum DESC, perf DESC, nomJoueur DESC)
  381.     LOOP
  382.         IF v_joueur.idJoueur = p_idJoueur THEN
  383.             RETURN v_cmp;
  384.         END IF;
  385.         v_cmp := v_cmp + 1;
  386.     END LOOP;
  387.     RETURN NULL;
  388. END;
  389.  
  390. --27
  391. CREATE OR REPLACE PROCEDURE affichageClasmntJoueurTounoi(p_idJoueur IN Joueurs.idJoueur%TYPE, p_idTournoi IN Tournois.idTournoi%TYPE) IS
  392. BEGIN
  393.     IF estInvaincu(p_idJoueur, p_idTournoi) = 0 THEN
  394.         DBMS_OUTPUT.PUT_LINE('Classement : ' || classementJoueurTournoi(p_idJoueur, p_idTournoi));
  395.     ELSE
  396.         DBMS_OUTPUT.PUT_LINE('Classement : ' || classementJoueurTournoi(p_idJoueur, p_idTournoi) || ' INVAINCU');
  397.     END IF;
  398. END;
  399.  
  400. --28
  401. CREATE OR REPLACE PROCEDURE affichagaFicheJoueurTournoi(p_idJoueur IN Joueurs.idJoueur%TYPE, p_idTournoi IN Tournois.idTournoi%TYPE) IS
  402. BEGIN
  403.     affichageInfosJoueur(p_idJoueur);
  404.     DBMS_OUTPUT.PUT_LINE(' ');
  405.     affichagePartiesJoueurTournoi(p_idJoueur, p_idTournoi);
  406.     DBMS_OUTPUT.PUT_LINE(' ');
  407.     affichageResultatJoueur(p_idJoueur, p_idTournoi);
  408.     affichageClasmntJoueurTounoi(p_idJoueur, p_idTournoi);
  409. END;
Advertisement
Add Comment
Please, Sign In to add comment