Mengirim data inkremental ke aplikasi lain dari database Oracle: - Bahkan saran kecil pun akan sangat membantu
Saya punya 1 meja, misalkan Item
. ada banyak DML
kejadian di meja ini setiap hari. Apapun DML (Sisipkan hapus pembaruan) yang terjadi pada tabel ini, saya perlu memasukkan data transaksi ini ke aplikasi lain menggunakan APIs
.
jika dalam tabel item, 2 catatan dimasukkan, 1 diperbarui dan, 1 dihapus saya perlu menyuntikkan data ke aplikasi lain di formulir di bawah ini. File akan berformat json.
I can create below file. My question is regarding how to extract daily transactional data.
{
"insert": ["A1,A2"].
"delete": "B1",
"update": "C1 "
}
sesuatu seperti di atas. artinya jika A1 A2 dimasukkan ke dalam tabel Item, B1 terhapus dan C1 diperbarui. jadi saya akan mengirimkan data dalam format di atas ke aplikasi target untuk melakukan perubahan.
Untuk melakukan ini saya membuat satu tabel lagi Item_trigger
. juga saya buat trigger
di tabel Item. jadi jika terjadi DML trigger
akan dimasukkan ke Item_trigger
tabel dengan nilai
('A1','Insert'), ('A2','Insert'),('B1','delete'),('C1','Update')
kemudian menggunakan Item_trigger
tabel saya akan membuat file dan mengirim data ke sistem target.
Desain di atas telah ditolak karena saya menggunakan trigger. Apakah ada solusi yang baik? Saya sedang memikirkan tentang MV tetapi tidak mempertimbangkan untuk menghapus. tidak mempertimbangkan delete
jadi saya bahkan tidak bisa menggunakan itu.
Bisakah Anda membantu saya dengan desain. Apakah ada cara untuk mencatat transaksi tanpa menggunakantrigger
Jawaban
Anda dapat menggunakan audit tingkat pernyataan pada tabel tertentu. Tetapi itu hanya akan memberikan informasi tentang jenis operasi apa yang telah dilakukan tetapi bukan data sebenarnya. Anda dapat menggabungkan informasi ini dengan menyimpan nilai dari apapun yang dimasukkan, dihapus dan diperbarui di tabel lain atau menggunakan tabel utama untuk mengirimkan data secara langsung.
Di bawah ini adalah scriptnya
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';