Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
13 mai 2012 7 13 /05 /mai /2012 14:40

 

SQL UPDATE.

Comment utiliser la commande sql UPDATE.
Comment changer des valeurs dans des tables Oracle.
Comment modifier et mettre à jour des données dans Oracle.

L'instruction SQL UPDATE est utilisée pour modifier les lignes existantes dans une table.
UPDATE modifie les valeurs des colonnes spécifiées dans une ou plusieurs lignes d'une table ou vue Oracle.

Vous pouvez modifier des colonnes dans une table, si elle est dans votre schéma ou si vous avez reçu le privilège UPDATE sur la table.
Si vous avez le privilège UPDATE ANY TABLE, vous pouvez alors modifier les colonnes des lignes de toutes les tables des schéma.

Respectez les CONTRAINTES (Unicité, Not NULL, Check,...) définies sur la table sous peine d'échec avec l'instruction UPDATE.

Syntaxe UPDATE table SET.

 
 UPDATE [schéma.] Nom_Table [@DBLink] SET column = expression | (subquery) (column1, column2,...) = (subquery) [WHERE (conditions)]; 

sql-update-table

La table de test pour mise à jour avec la commande UPDATE.

 SQL> SELECT * FROM scott.emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ------ ---------- --------------- ----- ---------- ---------- ---------- ---------- 1 SMITH CLERK 800,5 10 2 ALLEN SALESMAN 4 20/02/1985 1600 300 30 3 WARD SALESMAN 4 22/02/1983 1250 500,56 30 4 JONES MANAGER 02/04/1981 2975 30 5 MARTIN SALESMAN 4 28/09/1987 1250 1400 40 SQL> 

 

 

SQL UPDATE sur une colonne.

Update d'une colonne avec une valeur numérique.
On oubliera pas la condition de mise à jour dans la clause WHERE, sinon toutes les lignes de la table EMP seront mises à jour avec la nouvelle valeur.

 
 SQL> UPDATE emp SET sal = 800 WHERE empno = 1; 1 ligne mise à jour. SQL> COMMIT; Validation effectuée. SQL> SELECT * FROM emp WHERE empno = 1; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ------ ---------- --------------- ----- ---------- ---------- ---------- ---------- 1 SMITH CLERK 800 10 SQL> 

 


 

SQL UPDATE sur plusieurs colonnes.

Update sur plusieurs colonnes de table, elles sont séparées par des virgules dans la clause SET.
Dans la commande SQL UPDATE, il est possible d’affecter explicitement à une colonne la valeur par défaut définie sur cette colonne.

 
 SQL> UPDATE emp SET sal = 800, comm = DEFAULT WHERE empno = 1; 1 ligne mise à jour. SQL> COMMIT; Validation effectuée. SQL> SELECT * FROM emp WHERE empno = 1; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ------ ---------- --------------- ----- ---------- ---------- ---------- ---------- 1 SMITH CLERK 800 0 10 SQL> 

 


 

SQL UPDATE avec des fonctions et opérateurs.

Utilisation de fonctions et opérateurs dans la clause SET de la commande sql UPDATE.

 
 SQL> UPDATE emp SET ename = INITCAP(ename), job = LOWER(job), comm = (sal/2)*1.1 WHERE empno = 1; 1 ligne mise à jour. SQL> COMMIT; Validation effectuée. SQL> SELECT * FROM emp WHERE empno = 1; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ------ ---------- --------------- ----- ---------- ---------- ---------- ---------- 1 Smith clerk 800,5 440,28 10 SQL> 

 


 

SQL UPDATE avec des valeurs provenant d'une autre table.

Utilisation d'une sous-interrogation pour mettre à jour les départements à partir de la table DEPT, la sous-requête devra impérativement ramener une ligne unique sinon échec de l'instruction UPDATE avec l'erreur ORA-01427.

 
 SQL> UPDATE emp SET deptno = (SELECT deptno FROM dept WHERE dname = 'SALES') WHERE job = 'SALESMAN'; 3 ligne(s) mise(s) à jour. SQL> COMMIT; Validation effectuée. SQL> SELECT * FROM emp WHERE job = 'SALESMAN'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ------ ---------- --------------- ----- ---------- ---------- ---------- ---------- 2 ALLEN SALESMAN 4 20/02/1985 1600 300 30 3 WARD SALESMAN 4 22/02/1983 1250 500,56 30 5 MARTIN SALESMAN 4 28/09/1987 1250 1400 30 SQL> SQL> UPDATE emp SET deptno = (SELECT deptno FROM dept) WHERE job = 'SALESMAN'; SET deptno = (SELECT deptno * ERREUR à la ligne 2 : ORA-01427: sous-interrogation ramenant un enregistrement de plus d'une ligne SQL> 

 


 

SQL UPDATE avec des sous-requêtes.

Les sous-requêtes ou sous-interrogation peuvent être utilisées avec la commande UPDATE pour modifier les valeurs d'une ou plusieurs colonnes de tables Oracle.

 
 SQL> UPDATE emp e1 SET comm = (SELECT AVG(NVL(comm,0)) FROM emp e2 WHERE e1.deptno = e2.deptno); 5 ligne(s) mise(s) à jour. SQL> SELECT * FROM emp ; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ------ ---------- --------------- ----- ---------- ---------- ---------- ---------- 1 SMITH CLERK 800,5 0 10 2 ALLEN SALESMAN 4 20/02/1985 1600 266,85 30 3 WARD SALESMAN 4 22/02/1983 1250 266,85 30 4 JONES MANAGER 02/04/1981 2975 266,85 30 5 MARTIN SALESMAN 4 28/09/1987 1250 1400 40 SQL> SQL> UPDATE emp e1 SET (comm,sal) = (SELECT AVG(NVL(comm,0)), MAX(sal) FROM emp e2 WHERE e1.deptno = e2.deptno); 5 ligne(s) mise(s) à jour. SQL> SELECT * FROM emp ; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ------ ---------- --------------- ----- ---------- ---------- ---------- ---------- 1 SMITH CLERK 800,5 0 10 2 ALLEN SALESMAN 4 20/02/1985 2975 266,85 30 3 WARD SALESMAN 4 22/02/1983 2975 266,85 30 4 JONES MANAGER 02/04/1981 2975 266,85 30 5 MARTIN SALESMAN 4 28/09/1987 1250 1400 40 SQL> 

 

Haut de Page www.dba-ora.fr

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Update Table avec MERGE INTO

Partager cet article

Repost 0
Published by Oracle SQL - dans COMMANDES SQL DML-LMD
commenter cet article

commentaires

teddi 29/08/2012 08:50

merci mille fois exactement ce que je cherchais!!!! GREAT.

Merci encore

teddi 28/08/2012 11:12

Bonjour et merci pour ce merveilleux blog,

Je voudrais pour une table vérifier simultanément si 3 colones existent pour cela j´ai la requête suivante:

declare
v1
v2
v3

begin

select 1 into v1, v2, v3
from user_tab_columns
where table_name = MaTable
and (column_name = 'COL1' or column_name = 'COL2' or column_name = 'COL3' );

end;

mais lorsque j´execute ma requête j´ai un message d'erreur: ora-06550
statement ignore.

pouvez- vous me donner une astuce svp

merci.

Oracle SQL 28/08/2012 21:23



Merci pour ton commentaire.Teste ceci. Dans la clause select, le nbr de colonnes doit etre égale au nombre d'INTO 


SET SERVEROUTPUT ON


DECLARE
v1 PLS_INTEGER:=0;
v2 PLS_INTEGER:=0;
v3 PLS_INTEGER:=0;
BEGIN
SELECT 1, 1, 1 INTO v1, v2, v3
FROM user_tab_columns
WHERE table_name = 'ta_table'
AND ( column_name = 'ton_champ 1'
OR column_name = 'ton_champ 2'
OR column_name = 'ton_champ 3')
GROUP BY table_name
HAVING COUNT ( * ) = 3;

DBMS_OUTPUT.PUT_LINE('Variable 1 = '||v1 || ' Variable 2 = ' || v2|| ' Variable 3 = ' || v3);
DBMS_OUTPUT.PUT_LINE('Les 3 champs existent simultanément');

EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM(SQLCODE)||' Les 3 champs sont simultanément introuvables !!');
END;