Chèr(è)s Ami(e) en OracleJ’ai eu cette question de nos ami(e)s développeur.
Dois je utiliser le Truncate ou le Delete pour vider ma table avec des missions de lignes ?
TRUNCATE est généralement plus efficace mais a des effets secondaires dont vous devez être conscient. Par exemple, TRUNCATE est une instruction DDL(data definition language). Ça signifie Oracle valide automatiquement l'instruction (et la transaction en cours) après son exécution. Il est donc impossible de revenir en arrière.
Ainsi, pour les grandes tables, une instruction TRUNCATE est généralement le moyen le plus efficace de supprimer des données. Un autre effet secondaire de l'instruction TRUNCATE est que vous ne pouvez pas tronquer une table parent qui a une clé primaire défini qui est référencé par une contrainte de clé étrangère activée dans une table enfant, même si la table enfant contient zéro ligne
Si vous avez besoin de choisir de revenir en arrière (au lieu de valider) lorsque vous supprimez des données, vous devez utiliser DELETE
Comparez le comportement TRUNCATE à celui de l'instruction DELETE. Oracle vous permet d'utiliser le DELETE instruction pour supprimer des lignes d'une table parent alors que les contraintes sont activées qui référencent une table enfant (en supposant qu'il n'y a pas de lignes dans la table enfant). C'est parce que DELETE génère undo, est cohérent en lecture et peut être annulé
Si vous devez utiliser une instruction DELETE, vous devez émettre un COMMIT ou un ROLLBACK pour terminer la transaction. La validation d'une instruction DELETE rend les modifications de données permanente
Comparaison TRUNCATE et DELETE | ||
TRUNCATE | DELETE | |
Commit or rollback | NO | YES |
Reset HWM | YES | NO |
Active et déactive la contrainte | YES | NO |
Pour la grosse volumétrie | YES | NO |
OraclementVotre