Quantcast
Dimanche 7 novembre 2010 7 07 /11 /Nov /2010 16:23

 

UPDATE conditionnées de tables avec l'instruction Sql MERGE INTO.

Comment mettre à jour (UPDATE) une table cible et insérer (INSERT) des lignes à partir de données situées dans une table source ?
Avec l'instruction SQL MERGE INTO qui extrait des enregistrements d’une table source afin de mettre à jour (UPDATE) ou d’insérer (INSERT) des données dans une table cible.
La mise à jour et l’insertion dans la table cible est conditionné par la clause ON. Pour chaque enregistrement de la table cible qui vérifie la condition, l’enregistrement correspondant de la table source est modifié (UPDATE). Les données de la table cible qui ne vérifient pas la condition, déclenchent une insertion dans la table cible, basée sur des valeurs d’enregistrements de la table source.

 

Syntax SQL MERGE INTO.

 
MERGE [ hint ]
   INTO [ schema. ] { table | view } [ t_alias ]
   USING [ schema. ] { table | view | subquery }[ t_alias ]
   ON ( condition )
[ WHEN MATCHED THEN UPDATE SET column = { expr | DEFAULT }
                                              [, column = { expr | DEFAULT } ]...
[ WHERE condition ]
[ DELETE WHERE condition ]]
[ WHEN NOT MATCHED THEN INSERT [ (column [, column ]...) ]
                                        VALUES ({ expr [, expr ]... | DEFAULT })
[ WHERE condition ]];

 

Création de la table SALAIRE + INSERT Statement.

 
CREATE TABLE SALAIRE
(
  ID_SAL       INTEGER      NOT NULL,
  SAL_MONTANT  NUMBER(6,2)  NOT NULL,
  SAL_PRIME    NUMBER(6,2)
)
NOLOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
NOMONITORING;

INSERT INTO SALAIRE Values(1,1300,0);
INSERT INTO SALAIRE Values(2,1500,0);
INSERT INTO SALAIRE Values(3,2300,0);
INSERT INTO SALAIRE Values(4,2870,0);
INSERT INTO SALAIRE Values(5,3455,0);
INSERT INTO SALAIRE Values(6,1499,0);
INSERT INTO SALAIRE Values(7,2100,0);

 

Création de la table PRIME + INSERT Statement.

 
CREATE TABLE PRIME
(
  ID_PRIM   INTEGER NOT NULL,
  ID_SAL    INTEGER NOT NULL,
  SAL_PRIME NUMBER(6,2)
)
NOLOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
NOMONITORING;

INSERT INTO PRIME Values(10,1,35);
INSERT INTO PRIME Values(11,2,40);
INSERT INTO PRIME Values(12,3,100);
INSERT INTO PRIME Values(13,4,150);
INSERT INTO PRIME Values(14,5,250);

 

UPDATE avec MERGE INTO des primes dans la table salaire..

 

SQL> MERGE INTO SALAIRE A
USING (SELECT ID_SAL,SAL_PRIME FROM PRIME) B
ON (A.ID_SAL = B.ID_SAL)
WHEN MATCHED THEN UPDATE SET A.SAL_PRIME = B.SAL_PRIME ;

ID_SAL SAL_MONTANT SAL_PRIME
1 1300 35
2 1500 40
3 2300 100
4 2870 150
5 3455 250
6 1499 0
7 2100 0

 



Par Daniel Roesch - Publié dans : COMMANDES SQL DML-LMD
Ecrire un commentaire - Voir les 0 commentaires
Retour à l'accueil

Oracle Sql et administration

Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus - Articles les plus commentés