Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcja-problem
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
psql
Funkcja ma za zadanie nie pozwolić wypożyczyć płyty klientowi, dla którego cena wypożyczonych płyt przekracza określoną wartość. Nie wiem tylko jak zrobić, aby funkcja ta liczyła sumę cen dla konkretnego klienta. Na ten moment dodaje chyba wartości wszystkich płyt które są wypożyczone. Jak zrobić tak, żeby liczyła ona dla konkretnego klienta?

CODE
CREATE FUNCTION cenaplyty() RETURNS trigger AS $emp_stamp$
DECLARE
suma float;
BEGIN
SELECT sum(cena) INTO suma from plyta, wypozyczenie WHERE
plyta.numer=wypozyczenie.co_wypozyczyl;
IF (suma >19)
then RAISE NOTICE 'Przekracza okreslona wartosc';
return null;
END IF;
END;
$emp_stamp$ LANGUAGE plpgsql;
CREATE TRIGGER trigcenaplyty before INSERT on wypozyczenie for each row execute procedure cenaplyty();
mmmmmmm
Skorzystaj z NEW. Poza tym funkcja musi coś zwracać (właśnie ów NEW), a twoja zwraca tylko Null w przypadku błędu.
psql
Czyli w przypadku braku błędu będzie return NEW, tylko nie wiem i tak jak to new zapisać żeby sumowało dla konkretnego klienta
mmmmmmm
  1. CREATE FUNCTION cenaplyty() RETURNS TRIGGER AS $emp_stamp$
  2. DECLARE
  3. suma float;
  4. BEGIN
  5. SELECT sum(cena) INTO suma FROM plyta JOIN wypozyczenie ON plyta.numer=wypozyczenie.co_wypozyczyl
  6. WHERE wypozyczenie.klient=NEW.klient;
  7. /* oczywiście pola klient w obu tabelach są wymyślone...*/
  8. IF (suma >19)
  9. then RAISE NOTICE 'Przekracza okreslona wartosc';
  10. RETURN NULL;
  11. END IF;
  12. RETURN NEW;
  13. END;
  14. $emp_stamp$ LANGUAGE plpgsql;
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.
Invision Power Board © 2001-2024 Invision Power Services, Inc.