Cviceni 6
-- 
-- 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