Oracle
 sql >> Base de données >  >> RDS >> Oracle

Déclencheurs Oracle - problème avec les tables mutantes

Comme vous l'avez remarqué, il sera difficile de répondre aux besoins de votre entreprise avec des déclencheurs. La raison en est qu'Oracle peut mettre à jour/insérer les tables avec plus d'un thread en même temps pour une seule requête (DML parallèle). Cela implique que votre session ne peut pas interroger la table qu'elle met à jour pendant que la mise à jour a lieu .

Si vous voulez vraiment faire cela avec des déclencheurs, vous devrez suivre le titre sorte de logique montrée dans cet article de Tom Kyte . Comme vous pouvez le voir, ce n'est pas quelque chose de simple.

Il existe une autre méthode, plus simple, plus élégante, plus facile à maintenir :utiliser les procédures. Révoquez le droit de mise à jour/insertion aux utilisateurs de l'application et écrivez un ensemble de procédures permettant à l'application de mettre à jour les colonnes d'état.

Ces procédures maintiendraient un verrou sur la ligne parente (pour empêcher plusieurs sessions de modifier le même ensemble de lignes) et appliqueraient votre logique métier de manière efficace, lisible et facilement maintenable.