-- -- PL/SQL procedury -- -- Ukol c.1: Vytvorte funkci fact, ktera pro predany argument vrati jeho faktorial. -- Vypiste faktorial cisla 20. -- Dokumentace CREATE FUNCTION CREATE OR REPLACE FUNCTION fact(n INTEGER) RETURN INTEGER IS .... / -- vypis pripadnych chyb pri vkladani procedury do databaze SQL> SHOW error; -- Ukol c.2: Zkuste vypocet faktorial pro -5 -- Pro zapornou hodnotu neni faktorial definovan, -- proto vyvolejte vyjimku VALUE_ERROR. -- Ukol c.2b: Osetrete vyjimky funkce fact -- Pri chybe VALUE_ERROR vracejte nulu, tj. pro zaporny vstup. DROP TABLE zamestnanci; DROP TABLE zamestnanci_log; CREATE TABLE zamestnanci(id NUMBER PRIMARY KEY, jmeno VARCHAR2(30), mzda NUMBER); INSERT INTO zamestnanci VALUES (1, 'Pepik', 7550); INSERT INTO zamestnanci VALUES (2, 'Jenik', NULL); CREATE TABLE zamestnanci_log(id NUMBER, kdy DATE DEFAULT sysdate, text VARCHAR2(50)); -- Ukol c.3: Vytvorte proceduru, ktera zvysi danemu zamestnanci mzdu o danou hodnotu -- Pri nasledujici podmince zapise hlaseni do tabulky zamestnanci_log: -- mzda je NULL -> 'Mzda je NULL' -- zvyseni probehlo -> 'Mzda zmenena na <nova hodnota>' CREATE OR REPLACE PROCEDURE zvys_mzdu(id_zam INTEGER, suma REAL) IS .... / -- Ukol c.3a: Otestovani funkcnosti -- Spusteni procedury pomoci: SQL> EXECUTE nazev_procedury(pripadne parametry); -- a/ Zvyste Pepikovi mzdu o 1000. -- b/ Zvyste Jenikovi mzdu o 1000. -- c/ Podivejte se na obsah zamestnanci_log -- d/ Zkuste zvysit mzdu neexistujicimu zamestnanci (napr. id=5) -- Ukol c.3b: Pridani log zpravy -- a/ Pridejte hlaseni o neexistenci zamestnance: -- id neexistuje -> 'Zamestnanec neexistuje' -- b/ Zvyste mzdu neexistujicimu zamestnanci (napr. id=5) -- Podivejte se na obsah zamestnanci_log