dans Oracle, je peux spécifier les colonnes, qui devraient induire une cuisson d'un déclencheur: maintenant je veux faire ce qui suit: je ne veux pas que la gâchette Le feu, quand 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. P> Une autre façon serait d'utiliser la fonction de mise à jour comme celle-ci: p> mais si j'ai changé Col1 < em> et em> 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 forte> (COL3) a été mis à jour. P> P>
4 Réponses :
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 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. P> avant la mise à jour de ... Code> Clause. p>
Vous pouvez faire quelque chose comme ceci: probablement pas terriblement efficace cependant! p> p>
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. P>
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. P>
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é: p> mais j'ai eu des problèmes avec des valeurs nulles , alors j'ai ajouté: p> mais j'ai eu des problèmes avec des colonnes de date, il est devenu un désordre .. p> Je pense que la meilleure solution est Pour répertorier toutes les colonnes que vous souhaitez vérifier dans le "de": p> Ce n'était pas "élégant" mais ... ça a fonctionné parfait. P> p>
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'; code>
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. ;-)