Bonjour à tous,

Je fais le MERGE suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
MERGE INTO table_cible alias_cible
USING (	
	  	SELECT id id_source, dt_maj dt_source, chp1 chp1_source, chp2_source
		FROM table_source
	  ) s 
ON	( s.id_source = alias_cible.id and
          s.chp1_source = to_char(alias_cible.dt_decl,'YYYYMMDD'))
WHEN MATCHED then
	 UPDATE set id = id_source
WHEN NOT MATCHED then
	INSERT (id, dt_maj, dt_decl, chp2)
	VALUES (id_source, dt_maj, to_date(chp1_source, 'YYYYMMDD'), chp2_source);
EXCEPTION
    WHEN OTHERS THEN
        err_msg := SUBSTR(SQLERRM, 1, 100)

La partie en vert ne m'intéresse pas, mais quand je supprime le WHEN MATCHED, j'ai le message d'erreur suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
"ORA-00905: Mot-clé absent"
Donc, je la laisse en mettant un UPDATE sur un champ, sans changer sa valeur
Mais alors, j'ai un autre message d'erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
"ORA-00904: "TABLE_CIBLE"."ID" : identificateur non valide"
Après recherche sur plusieurs sites, il semble que ce problème survient quand on essaie de mettre à jour la clé de la table TABLE_CIBLE, or, cette table n'a pas de clé chez moi.

Au bout du compte, ce que je cherche à faire, c'est d'insérer si la ligne n'existe pas, mais de ne rien toucher si la ligne existe.

Merci de votre aide