Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sumowanie podczas wypelniania
vailor
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 21.03.2005

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


Wrzucam do tablicy 10k wpisow, kazdy wpis ma indeks i jakas ilosc.
moze sie zdarzyc ze kilka wpisow ma ten sam indeks.

W tablicy chcialbym miec jeden rekord dla jednego indeksu z suma ilosc wpisow o tym samym indeksie.
Zeby to miec musial bym w trakcie wrzucania sprawdzac czy sie juz istnieje taki indeks,
jesli istnieje dodawac ilosc nowego wpisu do juz istniejacego.

Inserty w transakcji.

Probowalem triggerem before insert, sprawdzam czy istnieje jesli istnieje pobieram ilosc do zmiennej sumuje z new zwraca null. Ale nie dziala, dziala tyle ze nie podwaja tych samych indeksow ale nie sumuje.

Trigger dziala w pelni jak robie copy z pliku tekstowego do bazy.

Jakis pomysl?

Ten post edytował vailor 13.06.2005, 13:12:28
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
vailor
post
Post #2





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 21.03.2005

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


W sumie tak, najwazniejsze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)


  1. CREATE TRIGGER tbl_materialy_dane_tr
  2. BEFORE INSERT ON tbl_materialy_dane
  3. FOR EACH ROW
  4. EXECUTE PROCEDURE func_tr_exist_ideks_dane();
  5.  
  6.  
  7. CREATE OR REPLACE FUNCTION func_tr_exist_ideks_dane()
  8. RETURNS "trigger" AS DECLARE _ilosc numeric(10,2);
  9. DECLARE _ilosc_rez numeric(10,2);
  10.  
  11. BEGIN IF EXISTS
  12. (
  13. SELECT indeks
  14. FROM tbl_materialy_dane WHERE tbl_materialy_dane.indeks = new.indeks
  15. ) THEN
  16.  
  17. SELECT
  18. INTO _ilosc ilosc
  19. FROM tbl_materialy_dane WHERE tbl_materialy_dane.indeks = new.indeks;
  20. SELECT
  21. INTO _ilosc_rez ilosc_rez
  22. FROM tbl_materialy_dane WHERE tbl_materialy_dane.indeks = new.indeks;
  23.  
  24. UPDATE tbl_materialy_dane SET
  25. ilosc=(_ilosc+new.ilosc),
  26. ilosc_rez=(_ilosc_rez+new.ilosc_rez)
  27. WHERE tbl_materialy_dane.indeks = new.indeks;
  28.  
  29. RETURN NULL;
  30.  
  31. END IF;
  32.  
  33. RETURN new;
  34.  
  35. END;
  36.  
  37. LANGUAGE 'plpgsql' VOLATILE;
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 11.10.2025 - 09:06