Developpez.com

Plus de 2 000 forums
et jusqu'à 5 000 nouveaux messages par jour

Developpez.com - SGBD & SQL
X

Choisissez d'abord la catégorieensuite la rubrique :


Requêtes UPDATE avec Oracle 9i DataBase

07/09/2003

Par giminik (Matthieu Petiot) (autres articles)
 

niveau : normal

durée : 20 minutes

Cet article vous guidera à travers la mise à jour de données dans des tables déjà existantes. Il est destiné aux débutants qui souhaitent apprendre et visualiser les résultats que produisent les requêtes SQL. Il suppose toutefois que vous ayez tout de même quelques connaissances du SQL.
J'adresse mes remerciements à armatatuxa qui a gracieusement relu cet article et corrigé les fautes d'orthographe.


Introduction
1. Intérêt de la clause UPDATE
1.1. Importance de la clause WHERE
2. UPDATE avec calcul(s)
3. UPDATE multi-colonnes
4. UPDATE avec affectation de la valeur NULL
5. UPDATE avec sous-requête dans la clause WHERE
6. UPDATE avec sous-requête dans la clause SET
7. UPDATE avec sous-requête synchronisée
8. Conclusion


Introduction


Nous allons maintenant procéder à la mise à jour de données. La mise à jour sert à modifier des lignes d'une table. Elle est nécessaire lorsque des informations, concernant un employé par exemple, ont changé et, de ce fait, ne sont plus vraies. Oracle vérifie que les contraintes ne soient pas violées, si tel est le cas, un message d'erreur est retourné.


1. Intérêt de la clause UPDATE


Lucie Balaiz, travaillant en tant que Fraiseur dans le département Fabrication localisé à Vesoul vien de se marier avec un homme nommé Bertrand Python, Lucie Balaiz devient donc Lucie Python.

UPDATE employe
    SET nomEmp = 'Python'
    WHERE nomEmp = 'Balaiz' ;


1.1. Importance de la clause WHERE


Remarquez que si la clause WHERE est omise, la mise à jour concerne tous les employés. Ils portent alors tous le nom Python.

Illustrons l'omission de cette clause. Avant toute chose faisons un COMMIT ; pour sauvegarder les modifications récemment apportées. De ce fait, après avoir testé la requête sans clause WHERE il suffira de faire un ROLLBACK ; pour revenir à la précédente sauvegarde.

COMMIT ;
UPDATE employe
    SET nomEmp = 'Python' ;
SELECT prenomEmp, nomEmp
FROM employe ;

PRENOMEMPNOMEMP
JamesPython
SylviePython
PierrePython
MarcPython
JackyPython
CorinnePython
Jean MariePython
DamienPython
JulienPython
JamelPython
MichelPython
LuciePython
MarcelPython
BernardPython
ROLLBACK ;

La précédente sauvegarde vient d'être restaurée, et nous allons donc pouvoir continuer à travailler.


2. UPDATE avec calcul(s)


Le boss a décidé d'augmenter chaque salaire de 2% de la commission de chaque employé.
Dans ce cas, on utilise la fonction NVL pour remplacer les valeurs NULL par 0 (zéro), car tout opération arithmétique comportant une valeur NULL produira un résultat NULL et comme salaireEmp ne peut être NULL, il est donc nécessaire d'utiliser cette fonction pour ne pas obtenir de message d'erreur.

UPDATE employe
    SET salaireEmp = SalaireEmp + 0.02 * NVL (commissionEmp, 0)
    WHERE commissionEmp IS NOT NULL ;


3. UPDATE multi-colonnes


Le patron décide de donner une commission de 511 Euros et d'augmenter le salaire de 400 Euros à l'employé Michel Ragondin.

UPDATE employe
    SET commissionEmp = 511, salaireEmp = salaireEmp + 400
    WHERE nomEmp = 'Ragondin'
        AND prenomEmp = 'Michel' ;
   


4. UPDATE avec affectation de la valeur NULL


Le boss a décidé de supprimer la commission de Jacky Lebof.

UPDATE employe
    SET commissionEmp = NULL
    WHERE nomEmp = 'Lebof'
        AND prenomEmp = 'Jacky' ;
   


5. UPDATE avec sous-requête dans la clause WHERE


Le boss décide d'augmenter de 5% les salaires des employés exerçant le métier de Tourneur. Il est donc nécessaire de connaître le numéro du département avant de pouvoir lancer la mise à jour des salaires.

UPDATE employe
    SET salaireEmp = salaireEmp * 1.05
    WHERE idFonc = (
        SELECT idFonc
        FROM fonction
        WHERE nomFonc = 'Tourneur'
    );


6. UPDATE avec sous-requête dans la clause SET


Le boss, vraiment très généreux, décide d'attribuer aux employés n'ayant pas de commission, la moitié de la valeur de la plus faible commission de tous les employés.

UPDATE employe
    SET commissionEmp = (
        SELECT 0.5 * MIN (commissionEmp)
        FROM employe
    )
    WHERE commissionEmp IS NULL ;


7. UPDATE avec sous-requête synchronisée


Le boss décide d'augmenter de 55 Euros les salaires des employés dont le salaire est inférieur au salaire moyen de leur département.

UPDATE employe e1
    SET salaireEmp = salaireEmp + 55
    WHERE salaireEmp < (
        SELECT AVG (salaireEmp)
        FROM employe e2
        WHERE e1.idDep = e2.idDep
    );


8. Conclusion


Maintenant, vous savez utiliser la clause UPDATE, vous pouvez passer au châpitre suivant : effacement de données.



Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur.
La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
Contacter le responsable de la rubrique SGBD & SQL