Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> funkcja psql, prośba o pomoc
kichawa93
post 17.04.2013, 09:47:02
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 17.04.2013

Ostrzeżenie: (0%)
-----


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!
Go to the top of the page
+Quote Post
mmmmmmm
post 17.04.2013, 10:00:37
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
kichawa93
post 17.04.2013, 15:36:56
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 17.04.2013

Ostrzeżenie: (0%)
-----


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;
Go to the top of the page
+Quote Post
mmmmmmm
post 17.04.2013, 18:03:04
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


Zdecydowanie za mało...
Jeśli DataWypozyczenia='2013-04-11' to OplataZaZwloke wychodzi ujemna... Doplacasz do interesu?
Go to the top of the page
+Quote Post
kichawa93
post 17.04.2013, 20:12:06
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 17.04.2013

Ostrzeżenie: (0%)
-----



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.


  1. CREATE FUNCTION OplataZaZwloke(INT) RETURNS INT
  2. LANGUAGE plpgsql
  3. AS
  4.  
  5. DECLARE
  6. OplataZaZwloke INT;
  7. BEGIN
  8. SELECT Wypozyczenie.DataWypozyczenia, (DATE()-(DataWypozyczenia+14))*10 AS OplataZaZwloke
  9. FROM Wypozyczenie
  10. WHERE Wypozyczenie.kto_wypozyczyl = $1;
  11. RETURN OplataZaZwloke;
  12. END;
  13. ';
Go to the top of the page
+Quote Post
mmmmmmm
post 18.04.2013, 06:07:46
Post #6





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


  1. CREATE FUNCTION OplataZaZwloke(INT) RETURNS INT
  2. AS
  3. $BODY$
  4. DECLARE
  5. wyliczona INT;
  6. BEGIN
  7. SELECT (DATE()-(DataWypozyczenia+14))*10
  8. INTO wyliczona
  9. FROM Wypozyczenie
  10. WHERE Wypozyczenie.kto_wypozyczyl = $1;
  11. RETURN wyliczona;
  12. END;
  13. $BODY$
  14. LANGUAGE plpgsql
  15. COST 10;
Go to the top of the page
+Quote Post
kichawa93
post 18.04.2013, 20:05:21
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 17.04.2013

Ostrzeżenie: (0%)
-----


O, to już gotowiec? Dzięki wielkie! smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 23:04