
ALTER TABLE Oracle : tout savoir pour modifier vos tables SQL
La commande ALTER TABLE en Oracle est l’une des instructions DDL (Data Definition Language) les plus utilisées en entreprise. Elle permet de modifier la structure d’une table existante sans la supprimer ni recréer : ajout ou suppression de colonnes, modification de types, gestion des contraintes… Maîtriser ALTER TABLE sous Oracle est indispensable pour tout développeur ou administrateur de base de données souhaitant faire évoluer son modèle de données en production.
Définition et utilisation d’ALTER TABLE en Oracle
La commande ALTER TABLE appartient à la catégorie des instructions DDL (Data Definition Language) du langage SQL Oracle. Elle permet de modifier la définition structurelle d’une table déjà créée dans la base de données, sans perdre les données qu’elle contient.
En entreprise, ce type d’opération est extrêmement fréquent dans les contextes suivants :
- Évolution du modèle métier : ajout d’une colonne pour stocker un nouveau champ (ex. : numéro de TVA, code client).
- Correction de structure : modification du type ou de la taille d’une colonne mal dimensionnée.
- Gestion des contraintes : ajout d’une clé primaire, d’une clé étrangère ou d’une contrainte d’unicité après la création initiale.
- Optimisation : activation ou désactivation de contraintes pour améliorer les performances lors de chargements massifs.
Oracle traite les opérations ALTER TABLE avec un verrou DDL sur la table concernée. Il est donc recommandé d’exécuter ces opérations pendant des fenêtres de maintenance pour les tables très sollicitées.
Syntaxe complète d’ALTER TABLE sous Oracle SQL
La syntaxe de base d’ALTER TABLE en Oracle est la suivante :
ALTER TABLE nom_table
action [, action, ...];
Les principales actions disponibles sont détaillées ci-dessous :
Ajouter une colonne
ALTER TABLE nom_table
ADD nom_colonne type_donnee [contrainte];
Modifier une colonne existante
ALTER TABLE nom_table
MODIFY nom_colonne nouveau_type [contrainte];
Supprimer une colonne
ALTER TABLE nom_table
DROP COLUMN nom_colonne;
Renommer une colonne
ALTER TABLE nom_table
RENAME COLUMN ancien_nom TO nouveau_nom;
Ajouter une contrainte
ALTER TABLE nom_table
ADD CONSTRAINT nom_contrainte type_contrainte (colonne);
Désactiver / Activer une contrainte
ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte;
ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte;
Paramètres essentiels :
nom_table: nom de la table existante à modifier.nom_colonne: nom de la colonne concernée par l’opération.type_donnee: type Oracle valide (VARCHAR2, NUMBER, DATE, CLOB, etc.).nom_contrainte: identifiant unique de la contrainte dans le schéma.
Exemples pratiques d’ALTER TABLE en Oracle
Exemple 1 – Ajout d’une colonne et d’une contrainte dans une table clients
Contexte métier : Une entreprise de e-commerce souhaite ajouter un champ email obligatoire et unique à sa table CLIENTS, ainsi qu’une date d’inscription.
-- Ajout de la colonne EMAIL avec contrainte NOT NULL
ALTER TABLE CLIENTS
ADD EMAIL VARCHAR2(150) NOT NULL;
-- Ajout d'une contrainte d'unicité sur la colonne EMAIL
ALTER TABLE CLIENTS
ADD CONSTRAINT uq_clients_email UNIQUE (EMAIL);
-- Ajout de la colonne DATE_INSCRIPTION avec valeur par défaut
ALTER TABLE CLIENTS
ADD DATE_INSCRIPTION DATE DEFAULT SYSDATE;
Explication :
- La colonne
EMAILest ajoutée enVARCHAR2(150)avec une contrainteNOT NULLdirectement lors de l’ajout. - Une contrainte d’unicité nommée
uq_clients_emailest ensuite ajoutée pour garantir qu’aucun doublon d’adresse email ne soit possible. - La colonne
DATE_INSCRIPTIONutiliseDEFAULT SYSDATE, une fonction Oracle native, pour renseigner automatiquement la date du jour à chaque insertion.
Exemple 2 – Modification de type et gestion d’une clé étrangère
Contexte métier : Le service informatique d’une banque doit agrandir la colonne NUMERO_COMPTE de la table COMPTES et ajouter une référence vers la table CLIENTS.
-- Agrandissement de la colonne NUMERO_COMPTE (VARCHAR2 de 20 à 30 caractères)
ALTER TABLE COMPTES
MODIFY NUMERO_COMPTE VARCHAR2(30);
-- Ajout de la colonne ID_CLIENT pour la clé étrangère
ALTER TABLE COMPTES
ADD ID_CLIENT NUMBER(10);
-- Création de la contrainte de clé étrangère vers la table CLIENTS
ALTER TABLE COMPTES
ADD CONSTRAINT fk_comptes_clients
FOREIGN KEY (ID_CLIENT)
REFERENCES CLIENTS (ID_CLIENT)
ON DELETE SET NULL;
Explication :
- La modification
MODIFYagrandit la taille deNUMERO_COMPTE. Oracle autorise l’agrandissement d’une colonne VARCHAR2 sans impact sur les données existantes. - La colonne
ID_CLIENTest ajoutée enNUMBER(10)pour accueillir la référence. - La contrainte
fk_comptes_clientscrée un lien d’intégrité référentielle. L’optionON DELETE SET NULLpermet de conserver les lignes deCOMPTESen mettantID_CLIENTà NULL si le client associé est supprimé.
Erreurs courantes avec ALTER TABLE en Oracle
ORA-01441 : impossible de diminuer la longueur d’une colonne contenant des données
Description de l’erreur : Cette erreur survient lorsque vous tentez de réduire la taille d’une colonne VARCHAR2 ou CHAR alors que certaines lignes contiennent des valeurs plus longues que la nouvelle taille cible.
-- Tentative incorrecte : réduction de VARCHAR2(100) à VARCHAR2(20)
-- alors que des valeurs de plus de 20 caractères existent
ALTER TABLE PRODUITS
MODIFY DESCRIPTION VARCHAR2(20); -- Erreur ORA-01441 !
Solution : Avant de réduire la taille d’une colonne, vérifiez la longueur maximale des données présentes avec la requête suivante, puis nettoyez ou tronquez les données si nécessaire :
-- Vérification de la longueur maximale des valeurs existantes
SELECT MAX(LENGTH(DESCRIPTION)) FROM PRODUITS;
-- Si nécessaire, mise à jour des données trop longues avant modification
UPDATE PRODUITS
SET DESCRIPTION = SUBSTR(DESCRIPTION, 1, 20)
WHERE LENGTH(DESCRIPTION) > 20;
COMMIT;
-- Modification de la colonne après nettoyage
ALTER TABLE PRODUITS
MODIFY DESCRIPTION VARCHAR2(20);
Résumé
| Action | Clause Oracle | Remarque |
|---|---|---|
| Ajouter une colonne | ADD nom TYPE | Supporte DEFAULT et contraintes inline |
| Modifier une colonne | MODIFY nom NOUVEAU_TYPE | Agrandissement libre, réduction conditionnelle |
| Supprimer une colonne | DROP COLUMN nom | Irréversible, données supprimées définitivement |
| Renommer une colonne | RENAME COLUMN ancien TO nouveau | Disponible à partir d’Oracle 9i |
| Ajouter une contrainte | ADD CONSTRAINT nom TYPE (col) | PK, FK, UNIQUE, CHECK supportés |
| Désactiver une contrainte | DISABLE CONSTRAINT nom | Utile pour les imports massifs de données |
2 bonnes pratiques Oracle
- Nommez systématiquement vos contraintes : utilisez des conventions claires (
pk_,fk_,uq_,ck_) pour faciliter la maintenance et le débogage. Une contrainte sans nom explicite recevra un nom système difficile à identifier (ex. :SYS_C0012345). - Planifiez les ALTER TABLE en production : sur des tables volumineuses, certaines opérations (ajout de colonne avec DEFAULT NOT NULL avant Oracle 11g, reconstruction d’index) peuvent verrouiller la table et impacter les performances. Utilisez des fenêtres de maintenance ou la clause
ONLINElorsque disponible.
Aller plus loin
Pour approfondir votre maîtrise de la gestion des objets en Oracle SQL, voici trois sujets complémentaires à explorer :
- CREATE TABLE Oracle : apprenez à créer des tables structurées avec des types de données et des contraintes dès l’origine.
- Les contraintes SQL Oracle (PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK) : maîtrisez la gestion complète de l’intégrité des données dans vos schémas Oracle.
- DROP TABLE Oracle : découvrez comment supprimer des tables proprement, gérer les dépendances et utiliser la Recycle Bin d’Oracle.
Sur le même thème
- CONSTRAINT Oracle : Guide complet des contraintes SQL
- DROP SQL Oracle : supprimer des objets de base de données
- PARTITION Oracle SQL : Guide complet avec exemples
- MATERIALIZED VIEW Oracle : Guide Complet et Pratique
- Flashback Drop Oracle : Récupérer une Table Supprimée
- CREATE TABLE Oracle : Guide Complet avec Exemples SQL
