Postaram się nakreślić problem bez wrzucania całej bazy.
Zadanie jest następujące:
Stworzyć bazę danych biblioteka zawierającą informację o zbiorze (książki, płyty, gry, itd.), osobach wypożyczających oraz wypożyczeniach.
Funkcja: Funkcja plpgsql dodająca wypożyczenie, z założeniem, że przedmiot, nie może być wypożyczony po raz drugi.
Stworzone tabele: przedmioty, osoby, wypozyczenia.
Tabela wypożyczenia ma 3 kolumny: id_wypozyczenia, id_osoby, id_przedmiotu. Id_osoby i id_przedmiotu w relacji z pozostałymi tabelami, więc w tej tabeli znajdują się same wartości integer.
Rozumiem, że funkcja musi wyciągnąć wartości z kolumny id_przedmiotu, porównać z wprowadzanym i jeśli jest równe - zakończyć, jeślie nie - dodać insertem do tabeli wartości.
Brzmi dość prosto, ale każda próba kończyła się pominięciem warunku i dodaniem rekordu.
Część kodu (niedokładny i niekompletny, chcę tylko nakreślić):
CREATE OR REPLACE FUNCTION dodaj_pozyczenie(id_poz integer, id_oso integer, id_prz integer) RETURN VOID AS
DECLARE x integer
BEGIN
FOR x in Select id_przedmiotu from wypozyczenia
LOOP
IF id_przedmiotu = id_prz THEN EXIT;
ELSE INSERT INTO wypozyczenia VALUES (id_poz, id_oso, id_prz);
END IF;
Return NEXT x;
End LOOP;
END
Language plpgsql