Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Procedury #23

Open
Tracked by #13
Jitralar opened this issue Dec 8, 2024 · 1 comment
Open
Tracked by #13

Procedury #23

Jitralar opened this issue Dec 8, 2024 · 1 comment

Comments

@Jitralar
Copy link
Owner

Jitralar commented Dec 8, 2024

4 uložené procedury různého typu s odpovídající složitostí, triviální a podobné procedury nebudou uznány, každá z procedur musí mít odlišný výstup, tedy pracovat s různými operacemi, procedura může data zpracovávat i dávkově

@Jitralar Jitralar mentioned this issue Dec 8, 2024
33 tasks
@Jitralar
Copy link
Owner Author

Jitralar commented Dec 8, 2024

CREATE OR REPLACE PROCEDURE zvys_prijem_davkove(p_procenta IN NUMBER) IS
BEGIN
    FOR klient IN (SELECT id_klient, prijem FROM klient) LOOP
        UPDATE klient
        SET prijem = prijem + prijem * (p_procenta / 100)
        WHERE id_klient = klient.id_klient;
    END LOOP;
    COMMIT;
    DBMS_OUTPUT.PUT_LINE('Příjmy byly zvýšeny o ' || p_procenta || '% pro všechny klienty.');
END;
/
CREATE OR REPLACE PROCEDURE ZMENIT_KONTAKT_KLIENTA(
    p_id_klient IN klient.id_klient%TYPE,
    p_novy_kontakt IN kontakt.email%TYPE
)
AS
    v_pocet NUMBER;
BEGIN
    -- Zkontroluj, zda email již není použit
    SELECT COUNT(*) INTO v_pocet
    FROM kontakt
    WHERE email = p_novy_kontakt;

    IF v_pocet > 0 THEN
        RAISE_APPLICATION_ERROR(-20001, 'Email již existuje v databázi.');
    ELSE
        -- Aktualizuj kontakt klienta
        UPDATE klient
        SET kontakt_id_kontakt = (SELECT id_kontakt FROM kontakt WHERE email = p_novy_kontakt)
        WHERE id_klient = p_id_klient;
    END IF;
END;
/
CREATE OR REPLACE PROCEDURE GENEROVAT_STATISTIKY_PRIJMU AS
BEGIN
    FOR vek_skupina IN (
        SELECT CASE
                WHEN FLOOR(MONTHS_BETWEEN(SYSDATE, datum_narozeni) / 12) BETWEEN 18 AND 30 THEN '18-30'
                WHEN FLOOR(MONTHS_BETWEEN(SYSDATE, datum_narozeni) / 12) BETWEEN 31 AND 50 THEN '31-50'
                ELSE '51+'
               END AS vek_skupina,
               AVG(prijem) AS prumerny_prijem
        FROM klient
        GROUP BY CASE
                   WHEN FLOOR(MONTHS_BETWEEN(SYSDATE, datum_narozeni) / 12) BETWEEN 18 AND 30 THEN '18-30'
                   WHEN FLOOR(MONTHS_BETWEEN(SYSDATE, datum_narozeni) / 12) BETWEEN 31 AND 50 THEN '31-50'
                   ELSE '51+'
                 END
    ) LOOP
        DBMS_OUTPUT.PUT_LINE('Věková skupina: ' || vek_skupina.vek_skupina || ' Průměrný příjem: ' || vek_skupina.prumerny_prijem);
    END LOOP;
END;
/
CREATE OR REPLACE PROCEDURE VYHLEDAT_KLIENTY_V_REGIONU(
    p_kraj_id IN NUMBER
) AS
BEGIN
    FOR klient IN (
        SELECT k.id_klient, k.jmeno, k.prijmeni
        FROM klient k
        JOIN adresa a ON k.adresa_id_adresa = a.id_adresa
        JOIN kraj kr ON a.kraj_id_kraj = kr.id_kraj  -- Připojení tabulky kraj
        WHERE a.kraj_id_kraj = p_kraj_id  -- Hledání podle ID kraje
    ) LOOP
        -- Výstup klientů s odpovídajícím regionem
        DBMS_OUTPUT.PUT_LINE('Klient ID: ' || klient.id_klient || ' Jméno: ' || klient.jmeno || ' ' || klient.prijmeni);
    END LOOP;
END;
/

create or replace PROCEDURE vytvor_pojistku_klient (
    p_kli_id IN NUMBER,          -- ID klienta
    p_datum_sjednani IN DATE,    -- Datum sjednání pojistky
    p_poznamka IN VARCHAR2,      -- Poznámka k pojistce
    p_hodnota_pojisteni IN VARCHAR2, -- Hodnota pojištění
    p_cena_mesicne IN VARCHAR2   -- Cena pojištění měsíčně
) AS
    v_poj_id NUMBER; -- ID vytvořené pojistky
BEGIN
    -- Vložení nové pojistky
    INSERT INTO pojistka (
        poj_id_pojisteni, poj_datum_sjednani, poj_poznamka, poj_pojisteno_do_hodnoty, poj_cena_mesicne, povinosti_pov_id_povinosti, poj_id_arc
    ) VALUES (
        pojistka_seq.NEXTVAL,
        p_datum_sjednani,
        p_poznamka,
        p_hodnota_pojisteni,
        p_cena_mesicne,
        1,
        'N'
    )
    RETURNING poj_id_pojisteni INTO v_poj_id;

    -- Vložení vazby na klienta
    INSERT INTO pojistka_klient (
        poj_id_pojisteni, kli_id_klient, id_st_poj_kli
    ) VALUES (
        v_poj_id,
        p_kli_id,
        pojistka_klient_seq.NEXTVAL
    );
END;


@Jitralar Jitralar changed the title min. 4 uložené procedury různého typu s odpovídající složitostí, triviální a podobné procedury nebudou uznány, každá z procedur musí mít odlišný výstup, tedy pracovat s různými operacemi, procedura může data zpracovávat i dávkově; Procedury Dec 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant