
CREATE TABLE Oracle SQL : Syntaxe, Exemples et Bonnes Pratiques
La commande CREATE TABLE Oracle est l’une des instructions fondamentales du langage SQL DDL (Data Definition Language). Elle permet de définir la structure d’une nouvelle table dans une base de données relationnelle. Que vous soyez développeur, DBA ou analyste, maîtriser CREATE TABLE sous Oracle est indispensable pour concevoir des schémas robustes, performants et maintenables en environnement professionnel.
Définition et utilisation de CREATE TABLE dans Oracle
L’instruction CREATE TABLE permet de créer une nouvelle table dans un schéma Oracle en définissant ses colonnes, leurs types de données et leurs contraintes d’intégrité. C’est le point de départ de toute modélisation de base de données relationnelle.
En entreprise, CREATE TABLE est utilisée dans de nombreux contextes métier :
- Gestion commerciale : création de tables pour les clients, commandes, produits.
- Ressources humaines : structuration des données des employés, contrats, départements.
- Finance : modélisation des transactions, factures, comptes bancaires.
- Logistique : suivi des stocks, livraisons, fournisseurs.
Sous Oracle, la table est créée dans le schéma de l’utilisateur connecté par défaut, ou dans un schéma cible si des privilèges suffisants ont été accordés. Les tables sont stockées dans un tablespace, un espace logique de stockage propre à Oracle.
Syntaxe complète de CREATE TABLE Oracle SQL
Voici la syntaxe générale de l’instruction CREATE TABLE dans Oracle :
CREATE TABLE [schema.]nom_table
(
nom_colonne1 type_donnée [DEFAULT valeur] [contrainte_colonne],
nom_colonne2 type_donnée [DEFAULT valeur] [contrainte_colonne],
...
[contrainte_table]
)
[TABLESPACE nom_tablespace]
[STORAGE (paramètres_stockage)]
[LOGGING | NOLOGGING]
[COMPRESS | NOCOMPRESS];
Explication des paramètres essentiels
- [schema.]nom_table : nom de la table, précédé optionnellement du schéma propriétaire (ex. :
RH.EMPLOYES). - type_donnée : type Oracle de la colonne. Les types les plus courants sont :
NUMBER(p, s): nombre décimal avec précision et échelle.VARCHAR2(n): chaîne de caractères variable (jusqu’à 4000 octets).DATE: date et heure (jour, mois, année, heures, minutes, secondes).CHAR(n): chaîne de longueur fixe.CLOB/BLOB: données texte ou binaires volumineuses.TIMESTAMP: date et heure avec fraction de secondes.
- DEFAULT valeur : valeur insérée automatiquement si aucune valeur n’est fournie.
- Contraintes de colonne :
NOT NULL: interdit les valeurs nulles.UNIQUE: impose l’unicité des valeurs.PRIMARY KEY: identifiant unique de chaque ligne.REFERENCES: clé étrangère vers une autre table.CHECK: valide une condition logique.
- TABLESPACE : précise dans quel espace de stockage Oracle la table sera physiquement créée.
- NOLOGGING : améliore les performances lors de chargements massifs en réduisant les écritures dans les redo logs.
Exemples pratiques de CREATE TABLE Oracle SQL
Exemple 1 – Création d’une table CLIENTS (contexte commercial)
-- Création de la table CLIENTS dans le schéma VENTES
-- Cette table stocke les informations des clients d'une entreprise commerciale
CREATE TABLE VENTES.CLIENTS
(
CLIENT_ID NUMBER(10) CONSTRAINT PK_CLIENTS PRIMARY KEY,
NOM VARCHAR2(100) NOT NULL,
PRENOM VARCHAR2(100) NOT NULL,
EMAIL VARCHAR2(200) CONSTRAINT UQ_EMAIL UNIQUE,
TELEPHONE VARCHAR2(20),
DATE_CREATION DATE DEFAULT SYSDATE NOT NULL,
STATUT CHAR(1) DEFAULT 'A'
CONSTRAINT CHK_STATUT CHECK (STATUT IN ('A', 'I', 'S'))
)
TABLESPACE USERS
LOGGING;
Analyse de l’exemple :
NUMBER(10)pour l’identifiant client, défini comme clé primaire nomméePK_CLIENTS.VARCHAR2(100) NOT NULLimpose que le nom et le prénom soient toujours renseignés.DEFAULT SYSDATEinsère automatiquement la date du jour à la création du client.- La contrainte
CHECKlimite le statut aux valeurs ‘A’ (Actif), ‘I’ (Inactif) ou ‘S’ (Suspendu).
Exemple 2 – Création d’une table COMMANDES avec clé étrangère (contexte commercial)
-- Création de la table COMMANDES liée à la table CLIENTS
-- Chaque commande est associée à un client existant via une clé étrangère
CREATE TABLE VENTES.COMMANDES
(
COMMANDE_ID NUMBER(10) CONSTRAINT PK_COMMANDES PRIMARY KEY,
CLIENT_ID NUMBER(10) NOT NULL
CONSTRAINT FK_CMD_CLIENT
REFERENCES VENTES.CLIENTS(CLIENT_ID)
ON DELETE CASCADE,
DATE_COMMANDE DATE DEFAULT SYSDATE NOT NULL,
MONTANT_HT NUMBER(12, 2) NOT NULL,
MONTANT_TTC NUMBER(12, 2)
CONSTRAINT CHK_MONTANT CHECK (MONTANT_TTC >= MONTANT_HT),
STATUT_CMD VARCHAR2(20) DEFAULT 'EN_ATTENTE' NOT NULL
)
TABLESPACE USERS
LOGGING;
Analyse de l’exemple :
- La contrainte
FK_CMD_CLIENTrelie chaque commande à un client existant dansVENTES.CLIENTS. ON DELETE CASCADEsupprime automatiquement les commandes si le client est supprimé.NUMBER(12, 2)est adapté pour stocker des montants financiers avec deux décimales.- La contrainte
CHECKgarantit que le montant TTC est toujours supérieur ou égal au montant HT.
Erreurs courantes avec CREATE TABLE Oracle
Erreur ORA-00955 : le nom est déjà utilisé par un objet existant
C’est l’erreur la plus fréquente lors de l’exécution d’un CREATE TABLE. Elle se produit lorsqu’une table portant le même nom existe déjà dans le schéma cible.
Message d’erreur Oracle :
ORA-00955: name is already used by an existing object
Cause : Une table (ou tout autre objet : vue, séquence, synonyme…) portant ce nom existe déjà dans le schéma.
Solution : Vérifiez l’existence de la table avant de la créer, ou supprimez-la préalablement si nécessaire :
-- Vérification de l'existence de la table avant création
SELECT TABLE_NAME
FROM ALL_TABLES
WHERE OWNER = 'VENTES'
AND TABLE_NAME = 'CLIENTS';
-- Suppression conditionnelle (à utiliser avec précaution en production)
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE VENTES.CLIENTS CASCADE CONSTRAINTS PURGE';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
END IF;
END;
/
En environnement de développement, cette approche permet de réexécuter les scripts de création sans erreur. En production, préférez une procédure de migration contrôlée.
Résumé
| Point clé | Description |
|---|---|
| Instruction | CREATE TABLE – appartient au DDL (Data Definition Language) |
| Utilité | Définir la structure d’une table (colonnes, types, contraintes) |
| Types courants Oracle | NUMBER, VARCHAR2, DATE, CHAR, CLOB, TIMESTAMP |
| Contraintes principales | PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY, CHECK |
| Paramètres Oracle spécifiques | TABLESPACE, STORAGE, LOGGING/NOLOGGING, COMPRESS |
| Erreur fréquente | ORA-00955 : objet de même nom déjà existant |
| Nommage des contraintes | Toujours nommer explicitement les contraintes pour faciliter la maintenance |
Bonnes pratiques Oracle
- Nommer toutes les contraintes explicitement : utilisez une convention de nommage cohérente (ex. :
PK_,FK_,UQ_,CHK_) plutôt de laisser Oracle générer des noms système. Cela facilite grandement les opérations de maintenance, notamment lors de la suppression ou modification de contraintes viaALTER TABLE. - Spécifier le TABLESPACE cible : ne laissez pas Oracle placer la table dans le tablespace par défaut de l’utilisateur sans réflexion. En production, définissez explicitement le tablespace afin de contrôler la répartition du stockage, les performances I/O et les politiques de sauvegarde.
Aller plus loin
Maintenant que vous maîtrisez la commande CREATE TABLE dans Oracle SQL, voici trois sujets complémentaires pour approfondir vos compétences :
- ALTER TABLE Oracle SQL : apprenez à modifier la structure d’une table existante en ajoutant des colonnes, en modifiant des types de données ou en gérant des contraintes.
- Les contraintes Oracle SQL (PRIMARY KEY, FOREIGN KEY, CHECK) : maîtrisez en détail les mécanismes d’intégrité des données pour concevoir des bases de données fiables et cohérentes.
- Les séquences Oracle SQL (CREATE SEQUENCE) : découvrez comment générer automatiquement des identifiants numériques uniques pour alimenter vos clés primaires de façon efficace et sécurisée.
Vidéo : Vidéo SQL ORACLE – 01 : Les Tables (CREATE ALTER TABLE).
https://www.youtube.com/watch?v=3du8gnABgPk[/embed]
