Well, there are a lot of new requirements to unload data from Oracle into a non-proprietary format like CSV given the vast # of migrations away from Oracle these days.
Conner MacDonald sums the options up nicely in this youtube video. It is worth it’s a weight in gold if you need to export large amounts of data again in a non-proprietary format, and want to see some options.
Unfortunately, Oracle does not make it easy.
But to sum up – use dbms_parallel, and determine rowid ranges with sqlplus, make sure you use array_size, and if you are using sqlplus use:
SET MARK[UP] CSV {ON|OFF} DELIMI[TER] character QUOTE {ON|OFF}