Envio de dados incrementais para outro aplicativo do banco de dados Oracle: - Mesmo uma pequena sugestão seria muito útil

Aug 15 2020

Eu tenho 1 mesa, vamos supor Item. há muitos DMLeventos diários nesta mesa. Qualquer DML (Insert update delete) acontece nesta tabela, eu preciso inserir esses dados de transação em outro aplicativo usando APIs.

se na tabela de itens, 2 registros são inseridos, 1 atualizado e 1 excluído, preciso injetar dados em outro aplicativo no formulário abaixo. o arquivo estará no formato json.

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

algo como acima. significa que se A1 A2 for inserido na tabela de itens, B1 foi excluído e C1 foi atualizado. então, enviarei os dados no formato acima para o aplicativo de destino para fazer alterações.

Para fazer isso, criei mais uma tabela Item_trigger. também criei triggerna tabela de itens. então, se qualquer DML acontecer, triggerserá inserido na Item_triggertabela com valor

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

então, usando a Item_triggertabela, vou criar o arquivo e enviar os dados para o sistema de destino.

O projeto acima foi rejeitado porque estou usando o gatilho. Existe alguma boa solução? Eu estava pensando em MV, mas não considero deletar. não considera, deleteentão não posso usar nem isso.

Você poderia me ajudar com o design. Existe alguma maneira de registrar a transação sem usartrigger

Respostas

Atif Aug 15 2020 at 23:32

Você pode usar a auditoria em nível de instrução em uma tabela específica. Mas isso fornecerá apenas as informações de que tipo de operação foi realizada, mas não os dados reais. Você pode combinar essas informações com o armazenamento do valor de tudo o que foi inserido, excluído e atualizado em outra tabela ou usar a tabela principal para transmitir dados diretamente.

Abaixo está o roteiro

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