Je veux placer une gâchette sur une table qui écrit toutes les données insérées / mises à jour dans un fichier journal supplémentaire pour le traitement avec un outil externe. P>
est le moyen d'accomplir cela? P>
3 Réponses :
Oui, ici Vous avez un exemple de la mise à jour Vous avez simplement besoin de faire une pièce similaire à la partie code> insert code>. p> < / code> partie. p>
Vous devez créer des déclencheurs qui exécutent après la modification de la ligne de table et écrivent à un fichier journal à l'aide du package UTL_FILE. P>
Les informations de package UTL_FILE sont disponibles ici: http://docs.oracle.com/cd/b19306_01/AppDev.102/b14258/ u_file.htm p>
et la documentation de déclenchement peut être trouvée ici: http://docs.oracle.com/cd/b10501_01/appdev.920/a96590/ adg13trg.htm p>
Il y a une réponse similaire à ce que vous recherchez ici: http://bytes.com/topic/oracle/answers/762007-Trigger-Output- fichier texte p>
Plus d'informations sur l'écriture dans un fichier à l'aide de PL / SQL ici: http://www.devshed.com/c/a / Oracle / écriture-to-text-files-in-oracle-plsql / p>
espérons qu'il aide ... p>
Comme @Tbone a commenté, vous voudrez peut-être envisager un avant de déclencher, car ils sont plus efficaces que la suite des déclencheurs - des documents Oracle: Avant que les déclencheurs de rangée ne soient légèrement plus efficaces que les déclencheurs de rangée. Avec les déclencheurs après la rangée, les blocs de données affectés doivent être lus (lecture logique, non lecture physique) une fois pour la gâchette, puis à nouveau pour la déclaration de déclenchement. Alternativement, avec les déclencheurs avant la rangée, les blocs de données doivent être lus qu'une seule fois pour la déclaration de déclenchement et la gâchette.
J'éviterais d'écrire sur le système de fichiers au moment de la DML, mais tirez les données dans un processus de lot chaque nuit (ou quelle que soit la fréquence).
de votre op, il n'est pas clair si vous avez besoin du "nouveau "Données après la mise à jour, ou les" anciennes "données avant la mise à jour. Si vous voulez juste que les dernières données, pourquoi ne pas simplement ajouter un champ modified_date (type de date ou horodatage) et de mettre à jour cela via une gâchette. P> Si vous avez besoin d'anciennes données avant la mise à jour (ou vous vous souciez des données supprimées), puis vous modifiez la gâchette pour écrire des valeurs anciennes ou supprimées à une table d'historique, puis extraire les données de là. p> Notez également que l'ajout d'un déclencheur à Une table ralentira l'activité DML associée. Certains magasins souhaitent éviter cela en remplaçant les déclencheurs avec des règles logiques commerciales ("toutes les applications doivent mettre à jour Modifed_date" édict), ce qui conduit généralement à des données incohérentes (ou de pire) de ce que j'ai vu. P> p>
Vous voudrez peut-être utiliser A avant d'insérer la mise à jour de la gâchette sur une table de journaux, puis extrayez ultérieurement pour le traitement sous une forme de lot (chaque nuit, peu importe). Assurez-vous d'ajouter un champ de date «action_date» (ou horodatage) que vous pouvez utiliser ultérieurement pour extraire de manière sélective les données en fonction du moment où le INS / UPD est survenu.
Merci Tbone, ce serait une bonne solution. Mais sans modifier l'application, je pense que j'ai besoin de mettre un déclencheur de mise à jour sur la table A ajouter une "dernière colonne de prochaine mise à jour / modification", sélectionnée tard dans cette colonne. Ou HAST Oracle une fonctionnalité de construction pour cela?