
Witam

Robię bazę danych w Postgresie, z interfejsem w PHP.
Czy możecie mi pomóc, i poradzić, dlaczego trigger może nie działać?
Powinien sprawdzać, czy nakładają się czasy trwania wykładu oraz kategorii (kategoria uczestnictwa w konferencji naukowej) - chcę w ten sposób sprawdzić, czy użytkownik zapisuje się na wykład, który odbywa się w dniu, w którym uczestniczy w konferencji. Jeśli nie, chcę zabronić mu zapisania się na dany wykład.
CREATE OR REPLACE FUNCTION kategoriewyklady_check() returns TRIGGER AS ' declare x bool; licznik int4 ; begin licznik = 0; x = (select (wyklady.kiedy,wyklady.trwanie) overlaps (kategorie.katkiedy,kategorie.kattrwanie) from zapisynawyklady,zapisynakonferencje,kategorie,wyklady WHERE zapisynawyklady.konfid=zapisynakonferencje.konfid AND zapisynawyklady.uczestid=zapisynakonferencje.uczestid AND zapisynawyklady.wykladid=wyklady.wykladid AND kategorie.katid=(select katid from zapisynakonferencje where uczestid=NEW.uczestid and konfid=NEW.konfid) AND zapisynawyklady.uczestid= NEW.uczestid AND zapisynawyklady.konfid= NEW.konfid AND wyklady.wykladid=NEW.wykladid); if x = false then licznik = licznik + 1; end if; IF licznik=0 THEN return NEW; ELSE raise notice ''Wyklad nie jest w dniu, w ktorym jestes zapisany na konferencje!''; return NULL; END IF; end; ' LANGUAGE 'plpgsql'; CREATE TRIGGER t_overlapskategoriewyklady before INSERT ON zapisynawyklady FOR each row execute procedure kategoriewyklady_check();
tabele:
kolumny w tabeli kategorie:
konfid | katid | kategoria|katkiedy| kattrwanie | koszt
w tabeli wyklady:
konfid | wykladid | temat| wykladowca | salaid |kiedy| trwanie | wolne_miejsca
w tabeli zapisynawyklady:
konfid | uczestid | wykladid
w tabeli zapisynakonferencje:
uczestid | konfid | katid