Sprawa dotyczy Oracle'a, ale generalnie chodzi o dzialanie transakcji (wiec kazda baza, ktora je obsluguje powinna miec podobne rozwiazanie). Mam taka sytuacje, ze mam dwie tabele o nastepujacej budowie (pominalem typy danych, restrykcje, zbedne pola itp. - uwzglednilem tylko elementy istotne):
TabelaZadan ( id_zadania, status_zadania); TabelaStatystyk ( ilosc_zadan, ilosc_wykonanych_zadan);
Sprawa wyglada nastepujaco:
Musze o pewnej okreslonej godzinie kazdego dnia wpisac do tabeli statystyk informacje o lacznej ilosci zadan z tabeli zadan, ale w ten sposob, ze w pole ilosc_zadan wpisze:
- czyli wszystkie zadania jakie zostaly wykonane, a w pole ilosc_wykonanych_zadan wpisze
count(id_zadania)
count(id_zadania) WHERE status_zadania = 1
Jako, ze nie da sie (o ile mi wiadomo) ulozyc tego w jednym warunku (a musi byc to wykonane w tym samym czasie) bo gdy dodam warunek to bedzie on rowniez dotyczyl tej funkcji agregujacej po calosci, wpadlem na pomysl zeby zastosowac transakcje. Oto jak to widze:
Kod
Poczatek transakcji:
insert into TabelaStatystyk(ilosc_zadan) select count(id_zadania) from TabelaZadan;
insert into TabelaStatystyk(ilosc_wykonanych_zadan) select count(id_zadania) from TabelaZadan where status_zadania = 1;
Koniec transakcji.
insert into TabelaStatystyk(ilosc_zadan) select count(id_zadania) from TabelaZadan;
insert into TabelaStatystyk(ilosc_wykonanych_zadan) select count(id_zadania) from TabelaZadan where status_zadania = 1;
Koniec transakcji.
Chodzi mi teraz o to czy transakcja obsluzy to tak jak mi sie wydaje, ze powinna obsluzyc

Jak tak nad tym myslalem to powstaje mi takie pytanie: skad baza danych bedzie wiedziala, ze ta druga operacje wykonac na tym samym rekordzie i ze to wlasnie ten rekord ma byc powiekszony o jedna kolumne... I z tym sie wlasnie zwracam do Was - mam nadzieje, ze ktos takie cos przerabial albo chociaz wie teoretycznie jak to rozwiazac. Z gory dziekuje za wszelka pomoc...