DELETE qui ignore les erreurs
Bonjour à tous.
Je dois préparer un script de purge partielle d'une base de données. La base comporte près de 300 tables, certaines des tables peuvent dépasser les 10 millions d'enregistrements. Le but est de supprimer toute une partie de l'activité dans la base, typiquement, ça pourrait être, par exemple, toute l'activité d'un département dans une entreprise car le département en question est dissout ou vendu, etc...
L'ensemble des 300 tables sera donc impacté, à priori !
J'ai certaines tables qui sont référencées par plus d'une centaine de clés étrangères, dont les données peuvent être référencées par des enregistrements qui vont être supprimés (donc théoriquement à supprimer), mais qui peuvent être, en même temps, référencées par des enregistrements qui ne seront pas supprimés.
C'est typiquement le cas d'une table annuaire qui regrouperait les infos de toutes les personnes physiques ou morales utilisées ailleurs dans la base.
Est-ce qu'il y a moyen de construire une requête DELETE qui, sur le principe, supprimerait les enregistrements qu'elle peut supprimer, non référencés donc, et qui, pour les enregistrements qui ne peuvent pas être supprimés
- ne génère pas d'erreur ou d'exception
- n'arrête pas ou ne fait pas planter le script dans lequel elle sera
- ignore l'enregistrement non supprimable
- passe à l'enregistrement suivant pour tenter de le supprimer
L'analyse n'est pas terminée, mais un certain nombre de tables sera concerné par ce type de requête
Ces requêtes seront dans un script plus complet qui fera la purge partielle de la totalité des tables
La totalité des purges sera, normalement sous couvert d'une transaction