Bonjour

Je suis sous Oracle 10g.

J'ai une table TABLE avec trois champs champs1, champs2 et champs3 Il n'y a pas de clef primaire.
Cependant, il n'existe qu'une ligne pour champs1- champs2 .
Par exemple si champs1 vaut 1000 et champs2 vaut 50, val3 ne pourra avoir qu'une seule valeur.

Quand je fais la commande suivante

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
INSERT INTO TABLE
VALUES (val1, val2, val3)
Cela fonctionne très bien. (Jusque là rien d'étonnant ^^)


Je souhaiterai faire l'insertion que si la paire val1-val2 n'est pas déjà présente en base. Dans ce cas, je ferai un update.


J'ai fait quelque recherches et il semble que je doive passer par "MERGE INTO".

SAUF que je n'y arrive pas. Vous pourriez m'éclairer svp ?

J'ai testé ceci mais ça ne fonctionne pas :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
MERGE INTO TABLE dest
            USING( SELECT CHAMPS1, CHAMPS2, CHAMPS3 FROM TABLE) src
                ON( dest.CHAMPS1= src.CHAMPS1) AND (dest.CHAMPS2= src.CHAMPS2) AND (dest.CHAMPS3 = src.CHAMPS3 )
            WHEN MATCHED THEN
                UPDATE SET dest.CHAMPS3 = src.CHAMPS3 
            WHEN NOT MATCHED THEN
                INSERT( dest.CHAMPS1, dest.CHAMPS2, dest.CHAMPS3 )
                    VALUES(src.CHAMPS1, src.CHAMPS2, src.CHAMPS3 )
PS: je ne sais pas comment mieux intégrer le code à ce message, comment faire ?