I don't know whether IBM codepage CP937
matches Oracle character set ZHT16DBCS
, resp. if Oracle support CP937 at all.
My recommendation would be to make a conversion to a more common character set, e.g. UTF-8. You can use for example native2ascii which is part of Java SE.
Would be like this:
native2ascii your_input_file native_file.txt -encoding x-IBM937
native2ascii native_file.txt your_input_file_in_utf8 -reverse -encoding UTF-8
or using pipe to make it in one step:
cat your_input_file | native2ascii -encoding x-IBM937 | native2ascii -reverse -encoding UTF-8 > your_input_file_in_utf8
Then, before you run sqlldr set NLS_LANG
accordingly:
SET NLS_LANG=.AL32UTF8 (Windows)
export NLS_LANG=.AL32UTF8 (Unix)
Just a note, territory and language are not relevant, so you can skip them if you like (as I did).
Of course, in your control file must you must set
CHARACTERSET AL32UTF8
Another note, "UTF-8" encoding means Oracle character set "AL32UTF8". There is also a Oracle character set named "UTF8", however this is CESU-8. For European languages they can be considered as equal, however for Chinese they might be different.