Отправка дополнительных данных в другое приложение из базы данных Oracle: - Даже небольшое предложение было бы очень полезно

Aug 15 2020

У меня есть 1 таблица, допустим Item. DMLна этом столе ежедневно происходит много всего . Независимо от того, что DML (Insert update delete) происходит в этой таблице, мне нужно вставить эти данные транзакции в другое приложение, используя APIs.

если в таблице элементов вставляются 2 записи, 1 обновляется и 1 удаляется, мне нужно ввести данные в другое приложение в форме ниже. файл будет в формате json.

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

что-то вроде выше. означает, что если A1 A2 вставлен в таблицу Item, B1 был удален, а C1 обновлен. поэтому я отправлю данные в указанном выше формате целевому приложению для внесения изменений.

Для этого я создал еще одну таблицу Item_trigger. также я создал triggerна таблице Item. поэтому, если произойдет какой-либо DML, он triggerбудет вставлен в Item_triggerтаблицу со значением

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

затем с помощью Item_triggerтаблицы я создам файл и отправлю данные в целевую систему.

Вышеупомянутый дизайн был отклонен, потому что я использую триггер. Есть ли хорошее решение? Я думал о MV, но он не рассматривает удаление. не считает, deleteпоэтому я не могу использовать даже это.

Не могли бы вы помочь мне с дизайном. Есть ли способ записать транзакцию без использованияtrigger

Ответы

Atif Aug 15 2020 at 23:32

Вы можете использовать аудит на уровне отчетов для конкретной таблицы. Но это предоставит только информацию о том, какой тип операции был выполнен, но не фактические данные. Вы можете объединить эту информацию с сохранением значения того, что вставлено, удалено и обновлено в другой таблице, или использовать основную таблицу для прямой передачи данных.

Ниже сценарий

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';