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.
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 ]];
|
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); |
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); |
|
SQL> MERGE INTO SALAIRE A |
| 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 |