kichawa93
17.04.2013, 09:47:02
Witam.
Mam pewien problem do rozwiązania, więc zwracam się do Was. Byłbym wdzięczny za pomoc.
Stworzyłem bazę danych (wypożyczalnia). Potrzebuję funkcję, która w przypadku nieoddania rzeczy po dwóch tygodniach naliczy 10zł kary za każdy dzień spóźnienia. Dopiero się uczę i nie bardzo wiem, jakie warunki założyć.
Mógłby mi ktoś napisać tę funkcję? Dzięki wielkie!
mmmmmmm
17.04.2013, 10:00:37
Na samej bazie się da.
Musiałbyś doinstalować pgAgenta (joby). Wtedy się w miarę da.
Ale i tak podałeś za mało danych.... (tabele, pola)
A i tak najważniejsza jest logika zastosowana do obliczeń... Np. czy codziennie ma naliczać karę (za dzień zwłoki), czy ma naliczć karę w momencie oddania (dopiero wtedy znamy zwłokę). W tym przypadku pgAgent nie jest potrzebny - wystarczy trigger.
kichawa93
17.04.2013, 15:36:56
Wydaje mi się, że to ma być na triggerach. W bazie mam tabele klient, kto_wypozyczyl, co_wypozyczyl, plyta. Zrobiłem coś takiego, tyle, że to chyba za mało...
SELECT Wypozyczenia.DataWypozyczenia, (DATE()-(DataWypozyczenia+14))*10 AS OplataZaZwloke
FROM Wypozyczenia;
mmmmmmm
17.04.2013, 18:03:04
Zdecydowanie za mało...
Jeśli DataWypozyczenia='2013-04-11' to OplataZaZwloke wychodzi ujemna... Doplacasz do interesu?
kichawa93
17.04.2013, 20:12:06
W międzyczasie zrobiłem coś takiego. W dobrym kierunku idę? Może mi to ktoś zweryfikować i poprawić ewentualnie? Średnio mi to wychodzi...Dzięki.
CREATE FUNCTION OplataZaZwloke(INT) RETURNS INT
LANGUAGE plpgsql
AS
DECLARE
OplataZaZwloke INT;
BEGIN
SELECT Wypozyczenie.DataWypozyczenia, (DATE()-(DataWypozyczenia+14))*10 AS OplataZaZwloke
FROM Wypozyczenie
WHERE Wypozyczenie.kto_wypozyczyl = $1;
RETURN OplataZaZwloke;
END;
';
mmmmmmm
18.04.2013, 06:07:46
CREATE FUNCTION OplataZaZwloke(INT) RETURNS INT
AS
$BODY$
DECLARE
wyliczona INT;
BEGIN
SELECT (DATE()-(DataWypozyczenia+14))*10
INTO wyliczona
FROM Wypozyczenie
WHERE Wypozyczenie.kto_wypozyczyl = $1;
RETURN wyliczona;
END;
$BODY$
LANGUAGE plpgsql
COST 10;
kichawa93
18.04.2013, 20:05:21
O, to już gotowiec? Dzięki wielkie!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.