J'utilise oracle.jdbc.dcn.DatabaseChangeListener
pour enregistrer des insertions/mises à jour/suppressions dans une table. Pour les inserts, je peux garder une trace des rowids. Cependant, j'ai un problème avec les mises à jour et les suppressions.Détection des modifications à l'aide de la notification de modification de la base de données Oracle
Pour les mises à jour, je cherche un moyen de trouver la valeur de la ligne/colonne avant que la mise à jour soit faite.
Pour les suppressions, j'obtiens le rowid qui a été supprimé, mais c'est tout ce que j'ai. Je voudrais une sorte de capacité de suivre quelle ligne a été supprimée.
Je définis les propriétés à l'aide de oracle.jdbc.OracleConnection
.
Properties changeNotifProps = new Properties();
changeNotifProps.put(OracleConnection.DCN_IGNORE_DELETEOP,"false");
changeNotifProps.put(OracleConnection.DCN_IGNORE_INSERTOP, "false");
changeNotifProps.put(OracleConnection.DCN_IGNORE_UPDATEOP , "false");
changeNotifProps.put(OracleConnection.DCN_NOTIFY_CHANGELAG , "0");
changeNotifProps.put(OracleConnection.DCN_NOTIFY_ROWIDS , "true");
changeNotifProps.put(OracleConnection.NTF_LOCAL_HOST , <hostname>);
changeNotifProps.put(OracleConnection.NTF_LOCAL_TCP_PORT , "7115");
return changeNotifProps;
Existe-t-il une sorte de propriété que je peux définir pour détecter la valeur précédente des lignes?
EDIT: J'ai oublié de mentionner que je le fais sur des centaines de tables. Je ne peux pas ajouter de triggers/tables pour enregistrer le changement. J'ai besoin d'enregistrer tous les changements dans la JVM.