Bonjour,
Après une discussion il y a quelques temps avec SQL Pro sur la section SQL Server, j'ai été convaincu qu'un trigger ne doit pas traiter les lignes modifiées "une à une", mais toutes ensembles en une seule fois.
Pour rappel, dans SQL Server "for each row" n'existe pas, et en lieu et place, il faut faire un curseur, ce qui est contre-performant.
Donc, pour un trigger sur la table "produit" sur la suppression, on va faire par exemple :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 create trigger mon_trigger on produit before delete as begin delete prix where product_id in (select id from deleted); end;
Donc pour 1000 produits supprimés par exemple, une seule instruction DELETE sur la table prix pour supprimer l'ensemble des lignes.
Comment faire avec Oracle ?
Car jusqu'à présent, je n'ai pas trouvé de doc qui explique comment faire.
A chaque fois (y compris sur le site de la doc officielle) soit je trouve des exemple "for each row", soit des exemples où on n'a pas accès aux tables virtuelles inserted et deleted.
C'est possible ou si je dois me résigner ?
Je pose cette question car j'ai un DEV à faire où je vais potentiellement avoir des dizaines de milliers de lignes à traiter dans un trigger, et l'opération étant très simple, j'aurais préféré pouvoir faire la modification en masse plutôt que ligne à ligne.
Partager