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 (1 - 4)
SongoQ
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
sprawdzam czy istnieje jesli istnieje pobieram ilosc do zmiennej sumuje z new zwraca null

Cos masz nie tak bo jesli zwraca Ci null to w nowym new masz wartosc NULL


--------------------
Go to the top of the page
+Quote Post
vailor
post
Post #3





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

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


Jesli istnieje taki indeks zwracam Null (przerywam tym insert) , jesli nie znajduje zwracam new.
Najdziwniejsze ze przy copy dziala OK.
Moze cos z transakcja ... chociaz transakcje wylaczylem i tez nie poszlo.
Go to the top of the page
+Quote Post
SongoQ
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Podeslij na forum kod triggera, wtedy moze komus uda sie pomuc.


--------------------
Go to the top of the page
+Quote Post
vailor
post
Post #5





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

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


W sumie tak, najwazniejsze 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

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 Aktualny czas: 19.08.2025 - 17:13