
La commande UPDATE en SQL Oracle : modifier des données efficacement
La commande UPDATE en SQL Oracle est l’une des instructions DML (Data Manipulation Language) les plus utilisées en entreprise. Elle permet de modifier une ou plusieurs lignes existantes dans une table de base de données. Que vous ayez besoin de corriger une valeur, de mettre à jour un statut ou de recalculer un champ, maîtriser l’UPDATE SQL Oracle est indispensable pour tout développeur ou administrateur de bases de données.
Définition et utilisation de la commande UPDATE
La commande UPDATE appartient au sous-langage DML de SQL. Elle est utilisée pour modifier les valeurs de colonnes existantes dans une ou plusieurs lignes d’une table, sans créer ni supprimer d’enregistrements.
En entreprise, les cas d’usage sont nombreux et variés :
- Correction de données : rectifier une adresse email mal saisie ou un numéro de téléphone erroné.
- Mise à jour de statuts : passer une commande de « en cours » à « livrée » dans un système de gestion commercial.
- Recalcul de valeurs : appliquer une augmentation salariale à l’ensemble des employés d’un département.
- Synchronisation de données : mettre à jour une table cible à partir d’une table source dans un processus ETL.
Il est important de noter qu’en Oracle, toute opération UPDATE doit être validée explicitement via un COMMIT pour être définitivement enregistrée, ou annulée via un ROLLBACK. Oracle ne dispose pas de mode autocommit actif par défaut dans SQL*Plus ou SQL Developer.
Syntaxe complète de l’UPDATE SQL Oracle
La syntaxe de base de la commande UPDATE en Oracle est la suivante :
UPDATE nom_table
SET colonne1 = valeur1,
colonne2 = valeur2,
...
WHERE condition;
Explication des paramètres essentiels
| Paramètre | Description | Obligatoire |
|---|---|---|
nom_table | Nom de la table à mettre à jour | Oui |
SET | Clause définissant les colonnes à modifier et leurs nouvelles valeurs | Oui |
colonne = valeur | Paire colonne / nouvelle valeur. Plusieurs paires séparées par des virgules | Oui |
WHERE | Filtre les lignes à modifier. Sans cette clause, toutes les lignes sont mises à jour. | Non (mais recommandé) |
La valeur assignée dans le SET peut être :
- Une valeur littérale :
SET statut = 'ACTIF' - Une expression arithmétique :
SET salaire = salaire * 1.05 - Une sous-requête :
SET salaire = (SELECT avg_salaire FROM grilles WHERE grade = 3) - La valeur
NULL:SET commentaire = NULL
Exemples pratiques de UPDATE en SQL Oracle
Exemple 1 : Augmentation salariale ciblée dans un contexte RH
Contexte : dans une entreprise, le département des Ressources Humaines souhaite appliquer une augmentation de 8 % à tous les employés du département « INFORMATIQUE » dont le salaire est inférieur à 4 000 €.
-- Mise à jour des salaires des employés du département INFORMATIQUE
-- avec un salaire inférieur à 4000
UPDATE employes
SET salaire = salaire * 1.08,
date_modification = SYSDATE
WHERE departement = 'INFORMATIQUE'
AND salaire < 4000;
-- Validation définitive des modifications
COMMIT;
Explications :
salaire * 1.08applique une augmentation de 8 % sur la valeur actuelle du salaire.SYSDATEest une fonction Oracle qui retourne la date et l’heure système actuelles, très utile pour tracer les modifications.- Le
WHEREdouble garantit que seuls les enregistrements ciblés sont modifiés. - Le
COMMITfinalise la transaction.
Exemple 2 : Mise à jour avec sous-requête dans un contexte commercial
Contexte : une équipe commerciale souhaite mettre à jour le champ categorie_client de la table clients en se basant sur le total des commandes calculé dans la table commandes.
-- Mise à jour de la catégorie des clients
-- en fonction de leur chiffre d'affaires total
UPDATE clients c
SET categorie_client = (
SELECT
CASE
WHEN SUM(montant) >= 10000 THEN 'PREMIUM'
WHEN SUM(montant) >= 5000 THEN 'STANDARD'
ELSE 'BASIQUE'
END
FROM commandes co
WHERE co.id_client = c.id_client
)
WHERE EXISTS (
SELECT 1
FROM commandes co
WHERE co.id_client = c.id_client
);
-- Validation des changements
COMMIT;
Explications :
- La sous-requête corrélée dans le
SETcalcule dynamiquement la catégorie en fonction des commandes liées à chaque client. - La clause
CASEpermet d’attribuer une valeur conditionnelle sans code procédural. - Le
WHERE EXISTSgarantit que seuls les clients ayant au moins une commande sont mis à jour, évitant d’écraser inutilement des lignes non concernées. - L’alias
csur la table principale permet de lier la sous-requête à la ligne en cours de traitement (corrélation).
Erreurs courantes avec UPDATE en SQL Oracle
Erreur : oublier la clause WHERE et mettre à jour toutes les lignes
Il s’agit de l’erreur la plus fréquente — et potentiellement la plus catastrophique — lors de l’utilisation de UPDATE.
Exemple erroné :
-- DANGER : aucune clause WHERE, tous les statuts seront écrasés !
UPDATE commandes
SET statut = 'ANNULEE';
Cette requête met à jour toutes les lignes de la table commandes, quelle que soit leur valeur actuelle.
Solution :
-- Correct : seules les commandes du jour en attente sont annulées
UPDATE commandes
SET statut = 'ANNULEE'
WHERE statut = 'EN_ATTENTE'
AND TRUNC(date_commande) = TRUNC(SYSDATE);
COMMIT;
Bonne pratique de prévention : avant d’exécuter un UPDATE, effectuez d’abord un SELECT avec la même clause WHERE pour vérifier le nombre de lignes qui seront impactées. En Oracle, vous pouvez également utiliser SAVEPOINT avant l’opération pour pouvoir effectuer un ROLLBACK TO SAVEPOINT en cas d’erreur.
Résumé
| Point clé | Détail |
|---|---|
| Catégorie | DML (Data Manipulation Language) |
| Rôle | Modifier des valeurs dans des lignes existantes |
| Clause obligatoire | SET |
| Clause optionnelle mais critique | WHERE — sans elle, toutes les lignes sont modifiées |
| Validation | COMMIT requis en Oracle pour persister les changements |
| Annulation | ROLLBACK ou ROLLBACK TO SAVEPOINT |
| Valeur spéciale Oracle | SYSDATE, NULL, sous-requêtes corrélées |
| Piège principal | Oubli de la clause WHERE |
2 bonnes pratiques Oracle à retenir
- Toujours tester avec un SELECT avant d’exécuter un UPDATE. Remplacez temporairement votre
UPDATE ... SET ...par unSELECT *avec la même clauseWHEREpour valider le périmètre des lignes impactées avant de procéder à la modification réelle. - Utiliser les SAVEPOINT pour sécuriser les transactions complexes. Dans les scripts PL/SQL ou les lots de plusieurs
UPDATE, définissez des points de sauvegarde intermédiaires avecSAVEPOINT nom_point. En cas d’erreur sur l’une des étapes, vous pouvez revenir à un état stable sans perdre l’ensemble du travail effectué.
Aller plus loin
Vous maîtrisez maintenant la commande UPDATE en SQL Oracle. Pour approfondir vos compétences en manipulation de données, découvrez ces sujets complémentaires :
- La commande MERGE en SQL Oracle : combinez en une seule instruction les opérations INSERT, UPDATE et DELETE selon l’existence ou non des données cibles.
- Gérer les transactions avec COMMIT, ROLLBACK et SAVEPOINT en Oracle : comprenez le mécanisme transactionnel d’Oracle pour sécuriser toutes vos opérations DML.
- La commande DELETE en SQL Oracle : apprenez à supprimer des lignes de manière ciblée et à gérer les suppressions en cascade dans vos bases de données Oracle.
Sur le même thème
- INSERT en SQL Oracle : syntaxe, exemples et bonnes pratiques
- COMMIT Oracle SQL : valider vos transactions facilement
- FETCH FIRST Oracle : limiter les résultats SQL facilement
- Clause WITH Oracle SQL : CTE et sous-requêtes nommées
- Les sous-requêtes SQL Oracle : Guide complet et exemples
- Gestion des transactions SQL Oracle – Cours complet
