ALTER TABLE Oracle : modifier une table SQL facilement

Découvrez comment utiliser ALTER TABLE en Oracle SQL : syntaxe complète, exemples pratiques, erreurs courantes et bonnes pratiques pour modifier vos tables.

Illustration du tutoriel SQL Oracle : ALTER TABLE Oracle : modifier une table SQL facilement

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.

Publicité

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 EMAIL est ajoutée en VARCHAR2(150) avec une contrainte NOT NULL directement lors de l’ajout.
  • Une contrainte d’unicité nommée uq_clients_email est ensuite ajoutée pour garantir qu’aucun doublon d’adresse email ne soit possible.
  • La colonne DATE_INSCRIPTION utilise DEFAULT 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 MODIFY agrandit la taille de NUMERO_COMPTE. Oracle autorise l’agrandissement d’une colonne VARCHAR2 sans impact sur les données existantes.
  • La colonne ID_CLIENT est ajoutée en NUMBER(10) pour accueillir la référence.
  • La contrainte fk_comptes_clients crée un lien d’intégrité référentielle. L’option ON DELETE SET NULL permet de conserver les lignes de COMPTES en mettant ID_CLIENT à NULL si le client associé est supprimé.
Publicité

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é

ActionClause OracleRemarque
Ajouter une colonneADD nom TYPESupporte DEFAULT et contraintes inline
Modifier une colonneMODIFY nom NOUVEAU_TYPEAgrandissement libre, réduction conditionnelle
Supprimer une colonneDROP COLUMN nomIrréversible, données supprimées définitivement
Renommer une colonneRENAME COLUMN ancien TO nouveauDisponible à partir d’Oracle 9i
Ajouter une contrainteADD CONSTRAINT nom TYPE (col)PK, FK, UNIQUE, CHECK supportés
Désactiver une contrainteDISABLE CONSTRAINT nomUtile pour les imports massifs de données

2 bonnes pratiques Oracle

  1. 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).
  2. 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 ONLINE lorsque disponible.

Aller plus loin

Pour approfondir votre maîtrise de la gestion des objets en Oracle SQL, voici trois sujets complémentaires à explorer :

Sur le même thème

Un nouveau tutoriel SQL par semaine

Nous ne spammons pas ! Consultez notre politique de confidentialité pour plus d’informations.

Publicité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Publicité