11
votes

Oracle: excluant les mises à jour d'une colonne pour tirer un déclencheur

dans Oracle, je peux spécifier les colonnes, qui devraient induire une cuisson d'un déclencheur: xxx

maintenant je veux faire ce qui suit: je ne veux pas que la gâchette Le feu, quand une seule colonne a été mis à jour. Comment cela est-ce possible?

Je pourrais répertorier toutes les colonnes, à l'exception de celle qui ne doit pas induire une cuisson de la gâchette. C'est assez lourd pour les tables avec de nombreuses colonnes.

Une autre façon serait d'utiliser la fonction de mise à jour comme celle-ci: xxx

mais si j'ai changé Col1 < em> et col3 à la fois, la déclaration s'évalue sur FALSE. Ce n'est pas ce que je veux, car je veux limiter l'exécution lorsque une seule colonne (COL3) a été mis à jour.


2 commentaires

Il est moins lourd de répertorier toutes les colonnes à l'aide du dictionnaire de données. Sélectionnez Column_Name à partir d'user_tab_columns où table_name = 'My_Table' et colonne_name! = 'col3';


C'est vrai, mais quelqu'un d'autre devra maintenir la gâchette. Si nous allions ajouter une nouvelle colonne ou le renommer ... Je peux déjà l'entendre exclamer à haute voix. J'aimerais trouver un moyen fiable avec moins de douleur pour lui et surtout moi. ;-)


4 Réponses :


0
votes

Je ne pense pas que vous puissiez éviter de devoir répertorier toutes les autres colonnes de la table, soit dans le corps de la gâchette, soit dans le avant la mise à jour de ... Clause.

Cependant, vous pourrez peut-être écrire un changement de déclenchement de la table pour régénérer automatiquement le déclencheur de mise à jour si des colonnes sont ajoutées ou supprimées. C'est un peu plus de travail, mais la maintenance doit être automatique.


0 commentaires

13
votes

Vous pouvez faire quelque chose comme ceci: xxx

probablement pas terriblement efficace cependant!


0 commentaires

4
votes

Ce n'est probablement pas la réponse que vous voulez entendre, mais je pense que vous êtes plutôt trop exagérant le fardeau de l'entretien. Il n'est pas normal que la structure d'une table change très souvent après sa production. Si vous avez une table qui est soumise à des changements fréquents de numéro de colonne ou de nom, je vous suggérerais d'avoir un problème d'architecture plus grand et architecturale.

Alors, tapez simplement tous les noms de colonne maintenant et attendez de voir si la maintenance devient un problème. Il ne vaut certainement pas la peine de coder une implémentation compliquée dans une gâchette - une taxe que vous paierez sur chaque mise à jour - afin d'éviter des modifications occasionnelles au script DDL.


0 commentaires

5
votes

J'ai eu le même problème hier. Je voulais coder un déclencheur qui a tiré sur chaque champ, sauf un, la table comportait 103 colonnes.

D'abord j'ai codé: xxx

mais j'ai eu des problèmes avec des valeurs nulles , alors j'ai ajouté: xxx

mais j'ai eu des problèmes avec des colonnes de date, il est devenu un désordre ..

Je pense que la meilleure solution est Pour répertorier toutes les colonnes que vous souhaitez vérifier dans le "de": xxx

Ce n'était pas "élégant" mais ... ça a fonctionné parfait.


0 commentaires