Myślę, że nie potrzebujesz pętli. Zakładam, że twoje identyfikatory są kluczami podstawowymi i nie chciałeś powtarzać kilka razy w swoim przykładzie.
Czy coś takiego zadziała?
Edytuj zgodnie z komentarzem Raja A. Spowoduje to zaktualizowanie tylko wierszy, w których zmieniło się jedno z pozostałych pól. Pamiętaj, że nie zaktualizuje to wierszy, w których jeden jest NULL, a drugi nie jest NULL.
MERGE INTO final T
USING ( SELECT id, score, crank, urank FROM test ) S
ON ( S.vid = T.id AND
( S.crank != T.crank OR S.score != T.score OR S.urank != T.urank ))
WHEN MATCHED SET crank = S.crank, score = S.score,
crank = S.crank, urank = S.urank
WHEN NOT MATCHED THEN INSERT
[... not sure what you want to do in this case ...]