Saya tidak berpikir Anda perlu loop. Saya berasumsi id Anda adalah kunci utama dan Anda tidak bermaksud mengulangi engkol beberapa kali dalam contoh Anda.
Apakah hal seperti ini akan berhasil?
Edit per komentar Raj A. Ini hanya akan memperbarui baris di mana salah satu bidang lainnya telah berubah. Perhatikan bahwa ini tidak akan memperbarui baris yang satu NULL dan yang lainnya bukan 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 ...]