![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Mam procedurę, ktora zmienia mi wartosc pola POLE na 4, ale tylko dla tych rekordów, których mają aktualnie wartosc pola 3.
Teraz przy UPDATE pola wywoluje trigger (before), ktory wykonuje mi powyższą procedurę, ale tylko wowczas, gdy nowa wartosc pola to 3. Czyli defacto nie ma zapętlenia żadnego, jednak oracle nie pozwala na takie numery. Czy mozna jakos trigger wywolac by lał na to i dzialał? Bo teraz oracle tak jakby podejrzewa ze moze byc zapetlenie, gdyz wywoluje trigger, a w nim wywoluje procedure ktora znowu mi ten sam trigger wzbudza. Jednak ten trigger z procedury nie wywola zadnych zmian, gdyz nowa wartosc pola to 4 nie 3. Jak ktos zalapal oco biega i jakims cudem zna rozwiązanie to bardzo prosze o cynk. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat UPDATE danych nigdy nie pozwoli na ustawienie w POLU wartości "3" czemu nie pozwoli? pozwoli (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ja bede modyfikowal statusy. Chodzilo oto, ze procedura, ktora wywoluje trigger, zmienia status tylko na 4 a nigdy na 3. Ona zmienia z 3 na 4. Tak wiec bazka jest zaprojektowana ok. Jest to standardowa sytuacja, gdy mozesz miec cos opublikowanego. W danej chwili jednoczesnie moze byc ttlko jedna rzecz opublikowana (status=3). Gdy pojawia sie cos nowego do publikacji (cos dostaje status 3), to co bylo opublikowane przechodzi do archiwum (status 3 w innych rekordach zmienic na 4).Cytat Co do wywołania w triggerze procedury/funkcji która modyfikują tą samą tabele- to rzeczywiście Oracle na to nie pozwoli. no i to juz wiemy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
czemu nie pozwoli? pozwoli (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ja bede modyfikowal statusy. Chodzilo oto, ze procedura, ktora wywoluje trigger, zmienia status tylko na 4 a nigdy na 3. Ona zmienia z 3 na 4. Tak wiec bazka jest zaprojektowana ok. Jest to standardowa sytuacja, gdy mozesz miec cos opublikowanego. W danej chwili jednoczesnie moze byc ttlko jedna rzecz opublikowana (status=3). Gdy pojawia sie cos nowego do publikacji (cos dostaje status 3), to co bylo opublikowane przechodzi do archiwum (status 3 w innych rekordach zmienic na 4). no i to juz wiemy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Czyli w tabeli masz zawsze tylko jedno pole POLE o wartości równej 3? Czyli tak właściwie tylko zmieniasz jedno pole POLE z 3 na 4, pomijając fakt że na pewno będziesz chciał móc wybierać co jest wyświetlane. Chyba że tylko nowe INSERT rzeczy będą mieć 3 a w UPDATE zakażesz tego i w DELETE jeśli kasujesz to też musisz zmienić w którymś wartość pola POLE z 4 na 3 aby zawsze było coś wyświetlane (chyba że nie musi być zawsze). Chociaż moim zdaniem dziwne to całkowite blokowanie, powinno dać się wyłączyć aby jak ktoś jest pewien kodu aby to zrobiła lae to chyba podejście aby baza była stabilna (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Hmm, przy UPDATE wywołujesz Triggera która przy znalezieniu POLE=3 wywołuje UPDATE a jak już robisz UPDATE to znów się wywołuje Triggera który się zapętla. Czy może ja źle myślę (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) EDIT: Mylę się w ostatnim akapicie bo nie zawsze jest wywoływane UPDATE a jak jest to tylko ze zmianą POLE=4 więc nie wywołuje kolejny raz funkcji. Tak mnie to gryzie, więc napiszę po co Ci właściwie to pole POLE? Przecież wystarczy mieć tabele która przechowuje aktualnie wyświetlany rekord, a tak masz x-1 nadmiarowych pól?! (bo przecież każde POLE=4 jest nadmiarowe) Ten post edytował Sedziwoj 11.12.2006, 17:06:30 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 13:00 |