Supongo que col_id es la clave principal. Así que en la declaración de actualización
EXECUTE IMMEDIATE 'UPDATE ' || dest || ' SET COUNTRY_CODE = :v1 WHERE col_id = :v2'
USING l_vc_CountryCode, l_vc_ColId;
siempre está actualizando como máximo una fila y, por lo tanto, la condición
SQL%ROWCOUNT > 1
nunca es cierto ( 1 no es> 1 )
Entonces, si no tiene ninguna otra declaración de confirmación en su procedimiento, nunca confirmará esas actualizaciones.
Por cierto:cuál es el propósito de esto
if SQL%ROWCOUNT > 1 THEN
inserts := inserts + 1;
counter := counter + 1;
IF counter > 500 THEN
counter := 0;
COMMIT;
END IF;
END IF;
¿Por qué no te comprometes al final de tu trabajo?