Wysyłanie danych przyrostowych do innej aplikacji z bazy danych Oracle: - Nawet mała sugestia byłaby bardzo pomocna

Aug 15 2020

Załóżmy, że mam 1 stół Item. DMLna tym stole dzieje się wiele razy dziennie. Cokolwiek DML (Wstaw aktualizację, usuń) dzieje się w tej tabeli, muszę wstawić te dane transakcji do innej aplikacji za pomocą APIs.

jeśli w tabeli pozycji zostaną wstawione 2 rekordy, 1 zaktualizowany i 1 usunięty, muszę wprowadzić dane do innej aplikacji w poniższym formularzu. plik będzie w formacie json.

  I can create below file. My question is regarding how to extract daily transactional data.
{
  "insert": ["A1,A2"].
   "delete": "B1",
   "update": "C1 "
}

coś jak wyżej. oznacza, że ​​jeśli A1 A2 wstawiono do tabeli pozycji, B1 został usunięty, a C1 zaktualizowany. więc wyślę dane w powyższym formacie do aplikacji docelowej, aby wprowadzić zmiany.

W tym celu stworzyłem jeszcze jedną tabelę Item_trigger. również utworzyłem triggerw tabeli Item. więc jeśli zdarzy się jakikolwiek DML, triggerwstawi do Item_triggertabeli wartość

('A1','Insert'), ('A2','Insert'),('B1','delete'),('C1','Update')

następnie korzystając z Item_triggertabeli utworzę plik i wyślę dane do systemu docelowego.

Powyższy projekt został odrzucony, ponieważ używam wyzwalacza. Czy jest jakieś dobre rozwiązanie? Myślałem o MV, ale nie rozważa usunięcia. nie bierze pod uwagę, deletewięc nie mogę nawet tego użyć.

Czy mógłbyś mi pomóc w projektowaniu. Czy jest tak, aby rejestrować transakcję bez użyciatrigger

Odpowiedzi

Atif Aug 15 2020 at 23:32

Możesz skorzystać z kontroli na poziomie instrukcji na konkretnej tabeli. Ale to tylko dostarczy informacji o rodzaju operacji, ale nie dostarczy rzeczywistych danych. Możesz połączyć te informacje z przechowywaniem wartości wszelkich wstawionych, usuniętych i zaktualizowanych elementów w innej tabeli lub użyć tabeli głównej do bezpośredniego przesyłania danych.

Poniżej znajduje się skrypt

audit select,insert,update,delete on test.test_audit by access;
delete from test_audit where id <= 10;
select * from Dba_Audit_Object where OBJ_NAME='TEST_AUDIT';