--1
--with preduslovi (nivo, predmet, preko, uslovni_predmet) as
--(
-- Inicijalni SELECT
--select 0, koren.id_predmeta, cast(null as integer), id_uslovnog
--from db.uslovni_predmet koren
--where koren.id_predmeta in (select id from db.predmet where naziv='Relacione baze podataka')
--union all
-- Iterativni SELECT
--select roditelj.nivo+1, dete.id_predmeta, roditelj.predmet, dete.id_uslovnog
--from preduslovi roditelj, db.uslovni_predmet dete
--where roditelj.uslovni_predmet=dete.id_predmeta
--)
-- Glavni SELECT
--select distinct nivo as "Nivo" ,
--(select naziv from db.predmet b where b.id=a.predmet) as "Predmet",
--(select naziv from db.predmet b where b.id=a.preko) as "Predmet preko koga je preduslo",
--(select naziv from db.predmet b where b.id=a.uslovni_predmet) as "Uslovni predmet"
--from preduslovi a
--order by 1;

--2a

--CREATE DISTINCT TYPE OCENA AS SMALLINT WITH COMPARISONS; 

--2b

--CREATE TABLE POLOZENIPREDMETI (
--INDEKS INTEGER NOT NULL,
--ID_PREDMETA INTEGER NOT NULL,
--OCENA OCENA NOT NULL WITH DEFAULT 6,
--CONSTRAINT vazecaocena CHECK ( 
--              SMALLINT(OCENA) BETWEEN 6 AND 10),
--PRIMARY KEY(INDEKS, ID_PREDMETA));

--2c
--INSERT INTO POLOZENIPREDMETI
--SELECT INDEKS, ID_PREDMETA, OCENA
--FROM DB.ISPIT
--WHERE OCENA>5 AND STATUS_PRIJAVE='o';

--2d
--CREATE FUNCTION AVG(OCENA)
--RETURNS OCENA
--SOURCE SYSIBM.AVG (SMALLINT);

--2e
--SELECT INDEKS, AVG(OCENA)
--FROM POLOZENIPREDMETI
--GROUP BY INDEKS;

--2f
--CREATE VIEW STUDENTPREDMET(NAZIV_SMERA, INDEKS, IME, PREZIME, NAZIV_PREDMETA, OCENA)  AS
--SELECT S.NAZIV, D.INDEKS, IME, PREZIME, P.NAZIV, OCENA
--FROM POLOZENIPREDMETI PP JOIN DB.DOSIJE D
--       ON PP.INDEKS=D.INDEKS
--     JOIN DB.PREDMET P 
--       ON P.ID=PP.ID_PREDMETA
--     JOIN DB.SMER S
--       ON S.ID=D.ID_SMERA;

--2g
--CREATE TRIGGER polozen_ispit
--       AFTER INSERT ON db.ispit
--REFERENCING NEW AS polozen
--FOR EACH ROW
--WHEN (polozen.ocena>5 AND polozen.status_prijave='o')
--  BEGIN ATOMIC
--    INSERT INTO POLOZENIPREDMETI
--    VALUES (polozen.indeks, polozen.id_predmeta, OCENA(polozen.ocena));
--  END@

--2h
--CREATE FUNCTION STUDENTOCENA( student INTEGER, predmet varchar(200))
--RETURNS SMALLINT
--RETURN SELECT OCENA
--       FROM DB.ISPIT I JOIN DB.PREDMET P
--              ON P.ID=I.ID_PREDMETA
--       WHERE I.INDEKS=student AND P.NAZIV=predmet
--             AND OCENA>5 AND STATUS_PRIJAVE='o';

--SELECT D.INDEKS, P.NAZIV, STUDENTOCENA(D.INDEKS, P.NAZIV)
--FROM DB.DOSIJE D JOIN DB.OBAVEZAN_PREDMET OP
--       ON D.ID_SMERA=OP.ID_SMERA
--     JOIN DB.PREDMET P
--       ON P.ID=OP.ID_PREDMETA
--WHERE INDEKS=20060256;





