Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Funkcja-problem
psql
post 1.05.2013, 13:57:00
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 1.05.2013

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


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();


Ten post edytował psql 1.05.2013, 13:58:00
Go to the top of the page
+Quote Post
mmmmmmm
post 1.05.2013, 14:55:02
Post #2





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

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


Skorzystaj z NEW. Poza tym funkcja musi coś zwracać (właśnie ów NEW), a twoja zwraca tylko Null w przypadku błędu.
Go to the top of the page
+Quote Post
psql
post 1.05.2013, 15:15:10
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 1.05.2013

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


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
Go to the top of the page
+Quote Post
mmmmmmm
post 1.05.2013, 16:31:38
Post #4





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

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


  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;
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: 16.04.2024 - 15:18