Trigger: contrôle des doublons à l'insertion
Bonjour,
J'aurai besoin de l'avis d'experts concernant la mise en place de contrôles de doublons. Je m'explique:
- je reçois des fichiers plats via FTP avec des expéditions
- Ces expéditions sont remontées dans une table temporaire par bloc de 15000 via sqlloader selon certaines règles (on intègre que les expéditions des clients existants dans la base)
- ensuite on copie cette table temporaire dans la
table finale.
Sauf qu'aujourd'hui il n'y a pas de contrôle pour empécher d'éventuels doublons et cela devient très problématique.
Il faudrait donc que je rajoute dans le trigger d'insertion dans la table finale un contrôle. Il ya 2 solutions, pour une expédition donnée (identifiée
par un numéro d'expédition + le numéro de client)
- soit je supprime systématiquement les expéditions avec le meme identifiant avant l'insertion (si y'en a pas ça supprimera rien)
- soit je teste si l'expédition existe déja (table avec tres gros volume) si oui je supprime et j'insère ou j'update
Quelle serait selon vous le moins couteux niveau
performance?
Merci d'avance, je dois agir vite, et nous n'avons pas d'expert Oracle :roll:
Serveur Unix, Oracle 9i
Nb de lignes traitées par l'update
Une autre solution, plus performante a mon sens que de traiter les exceptions liées aux violations de contraintes est de commencer par un update puis un insert :
Code:
1 2 3 4 5
| Update EXPE set champ1 = var1 where num_cli = x and num_exp = y ;
If sql%rowcount = 0 Then
-- si l'instruction update n'a impacté aucune ligne
Insert into EXPE ... ;
End If ; |