Oracle
 sql >> Base de données >  >> RDS >> Oracle

ORA-30926 - État de fusion

En plus de l'explication de @zaratustra, votre fusion tente également de définir le fn et ln au même name valeur afin qu'il ne donne pas le résultat que vous voulez, même si cela a fonctionné. Et vous ne pouvez pas utiliser fn ou ln dans le using clause pendant que vous essayez de les mettre à jour.

Si votre name_test table avait une colonne de clé primaire (ou au moins unique), vous pouvez l'inclure dans la fusion, mais vous ne pourrez toujours mettre à jour correctement que le fn ou ln valeur en un seul passage.

Je ne sais pas pourquoi vous ne faites pas une simple mise à jour :

update name_test nt
set fn = (select td.name from temp_distinct td where td.fn = nt.fn),
  ln = (select td.name from temp_distinct td where td.fn = nt.ln);

8 rows updated.

select * from name_test;

FN    LN  
----- -----
Mich  Steve 
Mich  Phil  
Mark  Dave  
Mich  Phil  
Mich  Dave  
Phil  John  
Steve Dean  
Steve Phil