Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 7.53 KB | None | 0 0
  1. /*
  2.  * DAIS 2013/2014
  3.  * cv-3_task-1_1.sql
  4.  */
  5. CREATE OR REPLACE PROCEDURE SkoreKolo(p_nazevLiga Liga.nazev%TYPE, p_nazevRocnik Rocnik.nazev%TYPE, p_poradiKola Zapas.poradi_kola%TYPE)
  6. AS
  7.   v_idLiga Liga.idLiga%TYPE;
  8.   v_idRocnik Rocnik.idRocnik%TYPE;
  9.   v_sumSkoreDomaci NUMBER;
  10.   v_sumSkoreHoste NUMBER;
  11. BEGIN
  12.   SELECT idLiga INTO v_idLiga FROM Liga WHERE nazev = p_nazevLiga;
  13.   SELECT idRocnik INTO v_idRocnik FROM Rocnik WHERE idLiga = v_idLiga AND nazev = p_nazevRocnik;
  14.  
  15.   SELECT SUM(skore_domaci), SUM(skore_hoste) INTO v_sumSkoreDomaci, v_sumSkoreHoste  FROM Zapas WHERE idRocnik = v_idRocnik AND poradi_kola = p_poradiKola;
  16.   INSERT INTO SkoreKoloTab(idLiga, idRocnik, poradi_kola, skore_domaci, skore_hoste) VALUES(v_idLiga, v_idRocnik, p_poradiKola, v_sumSkoreDomaci, v_sumSkoreHoste);
  17.  
  18.   DBMS_OUTPUT.PUT_LINE(v_idLiga || ', ' || v_idRocnik || ', ' || p_poradiKola || ': ' || v_sumSkoreDomaci || ':' || v_sumSkoreHoste);
  19. END;
  20.  
  21. EXECUTE SkoreKolo('Extraliga ledního hokeje', '2012/2013', 52);
  22.  
  23. SELECT * FROM SkoreKoloTab;
  24.  
  25. CREATE TABLE SkoreKoloTab(
  26.   idLiga NUMBER,
  27.   idRocnik NUMBER,
  28.   poradi_kola NUMBER,
  29.   skore_domaci NUMBER NOT NULL,
  30.   skore_hoste NUMBER NOT NULL,
  31.   PRIMARY KEY(idLiga, idRocnik, poradi_kola));
  32.  
  33. DROP TABLE SkoreKoloTab;
  34.  
  35. /*
  36.  * DAIS 2013/2014
  37.  * cv-3_task-1_2.sql
  38.  */
  39. CREATE OR REPLACE TRIGGER aktualizujBodyHrace BEFORE INSERT ON Bodovani
  40.   FOR EACH ROW
  41. BEGIN
  42.   /* Uloha je jednoducha, zadani by mohlo byt obohaceno o kontrolu
  43.      zda hrac je hracem daneho tymu apod. */
  44.   UPDATE Hrac SET BODY = BODY + 1 WHERE idHrac = :NEW.idHrac;
  45. END;
  46.  
  47. DROP TRIGGER aktualizujBodyHrace;
  48.  
  49. DECLARE
  50.   v_idZapas Zapas.idZapas%TYPE;
  51. BEGIN
  52.   SELECT idZapas INTO v_idZapas FROM Zapas WHERE  poradi_kola=52 AND domaci=13 AND hoste=9;
  53.   INSERT INTO Bodovani VALUES(v_idZapas, 4, 'a');
  54.   DBMS_OUTPUT.PUT_LINE(v_idZapas);
  55. END;  
  56.  
  57. SELECT * FROM Hrac WHERE idHrac=4;
  58. SELECT * FROM Bodovani WHERE idZapas=5 AND idHrac=4;
  59.  
  60. /*
  61.  * DAIS 2013/2014
  62.  * cv-3_task-2_1.sql
  63.  */
  64. CREATE OR REPLACE PROCEDURE PrintNejlepsiHrac
  65. (p_idRocnik IN rocnik.idRocnik%TYPE, p_idTymu IN Tym.idTym%TYPE)
  66. AS
  67.     v_nazevLigy liga.nazev%TYPE;
  68.     v_nazevTymu tym.nazev%TYPE;
  69.     v_nazevRocniku rocnik.nazev%TYPE;
  70.     v_idhrac1 hrac.idhrac%TYPE;
  71.     v_post VARCHAR(15);
  72.     v_hrac hrac%ROWTYPE;
  73.     v_goly NUMBER;
  74.  
  75.     TYPE array_t IS varray(4) OF VARCHAR2(2);
  76.     ARRAY array_t := array_t('l', 'p', 'c', 'd');
  77. BEGIN
  78.     SELECT nazev INTO v_nazevRocniku FROM rocnik WHERE idRocnik = p_idRocnik;
  79.     SELECT nazev INTO v_nazevLigy FROM liga WHERE idLiga IN
  80.     (SELECT idLiga FROM Rocnik WHERE idRocnik = p_idRocnik);
  81.     SELECT nazev INTO v_nazevTymu FROM tym  WHERE idTym = p_idTymu;
  82.  
  83.     DBMS_OUTPUT.put_line('Název ročníku ' || v_nazevRocniku);
  84.     DBMS_OUTPUT.put_line('Název ligy ' || v_nazevLigy);
  85.     DBMS_OUTPUT.put_line('Název tymu ' || v_nazevTymu);
  86.  
  87.     FOR i IN 1..ARRAY.COUNT LOOP
  88.     BEGIN
  89.  
  90.         CASE ARRAY(i)
  91.             WHEN 'l' THEN v_post := 'Levé křídlo';
  92.             WHEN 'p' THEN v_post := 'Pravé křídlo';
  93.             WHEN 'c' THEN v_post := 'Centr';
  94.             WHEN 'd' THEN v_post := 'Obránce';
  95.         END CASE;
  96.  
  97.     SELECT idHrac, COUNT(*) INTO v_idhrac1,v_goly FROM bodovani
  98.     WHERE idZapas IN
  99.       (SELECT idZapas FROM Zapas WHERE idRocnik = p_idRocnik AND (domaci = p_idTymu OR hoste = p_idTymu) AND typ = 'g')
  100.     AND idHrac IN
  101.       (SELECT idhrac FROM tymhrac WHERE idtym = p_idTymu AND idhrac IN (SELECT idhrac FROM hrac WHERE post = ARRAY(i) ))
  102.     AND ROWNUM = 1
  103.     GROUP BY idHrac
  104.     ORDER BY COUNT(typ) ;
  105.  
  106.     SELECT * INTO v_hrac FROM hrac WHERE idhrac = v_idhrac1;
  107.  
  108.     DBMS_OUTPUT.put_line(v_post || ': ' || v_hrac.jmeno || ' ' ||v_hrac.prijmeni ||  ' ,' ||  v_goly );
  109.  
  110.     EXCEPTION
  111.         WHEN NO_DATA_FOUND THEN
  112.         BEGIN
  113.             DBMS_OUTPUT.PUT_LINE(v_post || ': '|| 'NENALEZEN');
  114.             CONTINUE;
  115.         END;
  116.     END;
  117.     END LOOP;
  118.      
  119. END;
  120.  
  121. /*
  122.  * DAIS 2013/2014
  123.  * cv-3_task-2_2.sql
  124.  */
  125. CREATE OR REPLACE PROCEDURE VlozZapas(p_nazev_ligy Liga.nazev%TYPE, p_nazev_rocnik Rocnik.nazev%TYPE, p_poradi_kola Zapas.poradi_kola%TYPE,
  126.                                       p_domaci Zapas.domaci1%TYPE, p_hoste Zapas.hoste1%TYPE, p_datum Zapas.datum%TYPE, p_skore_domaci Zapas.skore_domaci%TYPE,
  127.                                       p_skore_hoste Zapas.skore_hoste%TYPE, p_navsteva Zapas.navsteva%TYPE)
  128. AS
  129.   v_id_liga Liga.idLiga%TYPE;
  130.   v_id_rocnik Rocnik.idRocnik%TYPE;
  131. BEGIN
  132.   SELECT idLiga INTO v_id_liga FROM Liga WHERE nazev = p_nazev_ligy;
  133.   SELECT idRocnik INTO v_id_rocnik FROM Rocnik WHERE nazev = p_nazev_rocnik AND idLiga = v_id_liga;
  134.   INSERT INTO Zapas(idRocnik, poradi_kola, domaci1, hoste1, datum, skore_domaci, skore_hoste, navsteva)
  135.   VALUES(v_id_rocnik, p_poradi_kola, p_domaci, p_hoste, p_datum, p_skore_domaci, p_skore_hoste, p_navsteva);
  136.  
  137.   IF p_skore_domaci > p_skore_hoste THEN
  138.     UPDATE Ucastnik SET BODY = BODY + 2 WHERE idRocnik = v_id_rocnik AND idTym = p_domaci;
  139.   ELSE IF p_skore_domaci < p_skore_hoste THEN
  140.     UPDATE Ucastnik SET BODY = BODY + 2 WHERE idRocnik = v_id_rocnik AND idTym = p_hoste;
  141.   ELSE
  142.     UPDATE Ucastnik SET BODY = BODY + 1 WHERE idRocnik = v_id_rocnik AND idTym = p_domaci;
  143.     UPDATE Ucastnik SET BODY = BODY + 1 WHERE idRocnik = v_id_rocnik AND idTym = p_hoste;
  144.   END IF;
  145.   COMMIT;
  146. END;
  147.  
  148.  
  149. /*
  150.  * DAIS 2013/2014
  151.  * cv-3_task-3_1.sql
  152.  */
  153. CREATE OR REPLACE PROCEDURE VypisRocniky
  154. AS
  155.   CURSOR vypisrocniky_cursor IS SELECT Liga.NAZEV AS liga_nazev, rocnik.nazev AS rocnik_nazev, idRocnik, zacatek, konec
  156.                                 FROM rocnik join liga ON Rocnik.idLiga = liga.idLiga
  157.                                 WHERE zacatek <= CURRENT_DATE AND TRUNC(CURRENT_DATE) <= konec;
  158.   poradi NUMBER;
  159. BEGIN
  160.   FOR rocnik_radek IN vypisrocniky_cursor LOOP
  161.     poradi := 1;
  162.     DBMS_OUTPUT.put_line(rocnik_radek.liga_nazev || ':' || rocnik_radek.rocnik_nazev || ' od: ' || rocnik_radek.zacatek || ' do: ' || rocnik_radek.konec );
  163.     DBMS_OUTPUT.put_line('Poradí Název Pocet bodu');
  164.     FOR ucastnik_radek IN (SELECT nazev, BODY FROM ucastnik join tym ON ucastnik.idTym = tym.idTym WHERE ucastnik.idrocnik = rocnik_radek.idRocnik ORDER BY ucastnik.BODY DESC) LOOP
  165.         DBMS_OUTPUT.put_line(poradi || '. ' || ucastnik_radek.nazev || ' ' || ucastnik_radek.BODY);
  166.         poradi := poradi + 1;
  167.     END LOOP;
  168.   END LOOP;
  169. END VypisRocniky;
  170.  
  171. /*
  172.  * DAIS 2013/2014
  173.  * cv-3_task-3_2.sql
  174.  */
  175. CREATE OR REPLACE PROCEDURE VlozZapas(p_nazev_ligy Liga.nazev%TYPE, p_nazev_rocnik Rocnik.nazev%TYPE, p_poradi_kola Zapas.poradi_kola%TYPE,
  176.                                       p_domaci Zapas.domaci1%TYPE, p_hoste Zapas.hoste1%TYPE, p_datum Zapas.datum%TYPE, p_skore_domaci Zapas.skore_domaci%TYPE,
  177.                                       p_skore_hoste Zapas.skore_hoste%TYPE, p_navsteva Zapas.navsteva%TYPE)
  178. AS
  179.   v_id_liga Liga.idLiga%TYPE;
  180.   v_id_rocnik Rocnik.idRocnik%TYPE;
  181. BEGIN
  182.   SELECT idLiga INTO v_id_liga FROM Liga WHERE nazev = p_nazev_ligy;
  183.   SELECT idRocnik INTO v_id_rocnik FROM Rocnik WHERE nazev = p_nazev_rocnik AND idLiga = v_id_liga;
  184.   INSERT INTO Zapas(idRocnik, poradi_kola, domaci1, hoste1, datum, skore_domaci, skore_hoste, navsteva)
  185.   VALUES(v_id_rocnik, p_poradi_kola, p_domaci, p_hoste, p_datum, p_skore_domaci, p_skore_hoste, p_navsteva);
  186.  
  187.   IF p_skore_domaci > p_skore_hoste THEN
  188.     UPDATE Ucastnik SET BODY = BODY + 2 WHERE idRocnik = v_id_rocnik AND idTym = p_domaci;
  189.   ELSE IF p_skore_domaci < p_skore_hoste THEN
  190.     UPDATE Ucastnik SET BODY = BODY + 2 WHERE idRocnik = v_id_rocnik AND idTym = p_hoste;
  191.   ELSE
  192.     UPDATE Ucastnik SET BODY = BODY + 1 WHERE idRocnik = v_id_rocnik AND idTym = p_domaci;
  193.     UPDATE Ucastnik SET BODY = BODY + 1 WHERE idRocnik = v_id_rocnik AND idTym = p_hoste;
  194.   END IF;
  195.   COMMIT;
  196. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement