OK, skoro twierdzisz że logika jest poprawna , spróbuje podać Ci sposób aby wprowadzić ten plan w życie
Będzie trochę skrótów , ale mam nadzieje że sobie poradzisz, w razie czego postaram się pomóc.
Do rzeczy :
1) Stwórz pakiet z dwoma procedurami :
- dodanie do listy (np add_to_list )
- zatwierdzenie zmian ( np save )
Aby zapewnić pojedyńcze i mass update'y najlepiej zadeklarować w pakiecie tablice, która będzie zawierać pola , dzięki którym będzie można dokładnie określić rekord w tabeli. Już tłumacze -
tablica ta będzie wykorzystywana do 'zapamiętania' modyfikowanych rekordów ( 'zapamiętywać' będzie pierwszy trigger 'A'), następnie na jej podstawie trigger 'B' ;-) dokona modyfkacji.
2) Stwórz trigger na tabeli
CREATE OR REPLACE TRIGGER DUMMY_TBL_A_TRG
AFTER INSERT OR UPDATE
ON DUMMY_TBL
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
W kodzie zaimplementuj 'zapamiętywanie' np
...
moj_pakiet.add_to_list(:NEW.id_pola,:new.pole);
...
3) Stwórz drugi trigger, tutaj już podam pełny przykład
CREATE OR REPLACE TRIGGER DUMMY_TBL_B_TRG
AFTER UPDATE ON DUMMY_TBL
BEGIN moj_pakiet.save;
END;
Jak łatwo się domyśleć procedura SAVE powinna zawierać sprawdzanie warunków i update tabeli DUMMY_TABLE.
Na koniec małe wyjaśnienie i ostrzeżenie

Rozwiązując ten problem wykorzystujemy właściwość pakietów - w obrębie sesji zmienne pakietowe są wspólne , dzięki czemu jeden trigger zapamiętuje rekordy a drugi dokonuje ich modyfikacji. Jednak niesie to ze sobą pewne niebezpieczeństwo - należy pamiętać aby w odpowiednim momencie wyczyścić tabele która zapamiętuje rekordy (jeśli istnieje taka potrzeba ) - można to zrobić np w dodatkowych triggerze BEFOR UPDATE.