Je dois faire un peu d'audit sur la mise à jour d'une ligne. J'ai donc une fonction qui reçoit un paramètre de type some_table% ROWTYPE, contenant les nouvelles valeurs à sauvegarder pour cette ligne.Récupère la propriété de variable Oracle PL/SQl par son nom (réflexion en PL/SQL)
J'ai également besoin d'enregistrer quelques informations dans un tableau d'historique concernant les valeurs des colonnes qui ont été modifiées. Je pensais obtenir les noms de colonne pour some_table à partir de all_tab_columns, puis iter sur ceux-ci pour comparer les anciennes et les nouvelles valeurs et voir si elle a été changée. Le problème est une fois que j'ai le nom de la colonne, je ne sais pas comment accéder à la valeur de ma variable ROWTYPE. Quelque chose comme var.getProperty (columnName). Je voulais le faire de cette façon pour éviter d'avoir un tas d'IF, une pour chaque champ, et cela fonctionnerait aussi directement sur l'ajout d'une nouvelle colonne à la table.
De même, je ne peux pas utiliser de déclencheurs parce que les plus hauts ont dit "Aucun déclencheur!". (Si c'est effectivement le seul moyen, je pourrais essayer de leur parler à nouveau à ce sujet).
Il y a, bien sûr, un certain nombre de façons de gérer cela, mais à mon avis un élément déclencheur est la meilleure approche pour maintenir une table d'histoire. –
@BobJarvis - un déclencheur est un mécanisme simple pour appeler du code. Il n'y a rien que nous puissions faire dans un déclencheur que nous ne pouvons pas faire dans une fonction comme décrit ici Andrei. – APC
@APC: Je soumets respectueusement que la différence est qu'un déclencheur fournit une exécution automatique dans des conditions données, par ex. SUR INSERER, SUR SUPPRIMER, etc.Bien que la même fonctionnalité puisse être implémentée dans une fonction, tout le code qui maintient la table de base en question doit maintenant être écrit pour appeler la fonction 'mise à jour de table d'historique', et mon expérience est que ces types de choses sont oubliés, oubliés ou contourné. Si la direction de @ Andrei a décrété "NO TRIGGERS!" la mise à jour de la table d'historique est mieux implémentée en tant que procédure, mais IMO un déclencheur serait mieux. YMMV. –