La commande TRUNCATE permet de supprimer toutes les lignes d'une table. Elle produit le même effet que la commande DELETE, mais elle est plus rapide que cette
dernière pour les tables volumineuses. En outre, la commande TRUNCATE libère tout l'espace disque
alloué à une table, cet espace devenant à nouveau disponible.
Vous pouvez utiliser la commande TRUNCATE dans une transaction explicite ou dans une procédure stockée
pour apporter d'autres modifications associées aux données dans une unité atomique. Lorsque vous utilisez la commande TRUNCATE de cette manière :
- En dehors du cas où la table tronquée a été créée dans la même
transaction, l'espace de stockage de la table n'est pas libéré (disponible
pour être réutilisé) tant que la transaction de troncature n'a pas été validée.
- La transaction de troncature peut être annulée, auquel cas le stockage et le contenu de la
table restent intacts.
- La table est verrouillée et aucun accès simultané (commandes SELECT
comprises) à la table à partir d'autres sessions ou transactions n'est autorisé
tant que la transaction de troncature n'a pas été validée ou annulée. L'annulation peut faire suite à
une commande ROLLBACK ou à un échec d'exécution dans la transaction.
- Si la transaction de troncature accède à d'autres tables, la probabilité d'interblocage
augmente. Vous pouvez éviter ce problème en exécutant
LOCK TABLE <nomtable> IN ACCESS EXCLUSIVE MODE au début de toute
transaction ou procédure qui tronque une ou plusieurs tables.
Pour des instructions sur l'utilisation de cette commande, voir LOCK TABLE.
- La commande TRUNCATE TABLE est bien plus rapide que la suppression de toutes les lignes à l'aide de la commande DELETE
FROM <table> et ne requiert pas de commande GROOM TABLE par la suite
pour récupérer l'espace. Toutefois, il existe un léger risque que, dans certains cas,
des transactions simultanées qui tentent d'accéder à une même table et de la tronquer
reçoivent le message suivant : ERROR: Cannot access table
because of concurrent truncateor ERROR: Cannot truncate
table because of concurrent insert or update. Vous pouvez minimiser ce
risque en utilisant la commande LOCK TABLE et en conservant une transaction
qui tronque une ou plusieurs tables active uniquement pour la durée nécessaire à la réalisation
de son objectif.
Syntaxe
Syntaxe de troncature d'une table vide :
TRUNCATE [ TABLE ] <nom>
Entrée
La commande TRUNCATE accepte l'entrée suivante :
Tableau 1. Entrée de la commande TRUNCATE| Entrée |
Description |
| <nom> |
Nom de la table à tronquer. |
Sortie
La commande TRUNCATE génère la sortie suivante :
Tableau 2. Sortie de la commande TRUNCATE| Sortie |
Description |
| TRUNCATE TABLE |
La commande a abouti. |
Droits
Vous devez être administrateur,
propriétaire de la table, propriétaire de la base de données ou du schéma ou votre
compte doit avoir la commande Truncate sur la table ou la classe d'objet Table.
Syntaxe
Voici un exemple de syntaxe :